Mac VS CODE 无法 ssh-remote 的解决过程
引言
将mac air刷回出厂版本 (Mojave) 后,确实获得了无比给力的运行速度和续航能力,开腾讯会议风扇也不转了,又可以一用八小时了,看起来一起都向着好的方向发展,除了一件事:Visual Studio Code(VS Code).
当我将一切软件都配置好了之后,发现作为我主力编程软件的VS Code竟然无法使用ssh-Remote连接服务器了。更离奇的是VS Code Insider居然成功了一次,之后双双停摆。在我看来这简直是灵异事件的程度了…
当前情况
Terminal: 可ssh
VS Code: 不可ssh, 不可ssh-Remote
VS Code Insider: 不可ssh, 不可ssh-Remote(成功仅首次)
过程
删除服务器服务文件
第一个值得考虑的就是因为客户端的CODE版本不同产生了不同的服务端configFile文件,先删掉试试。
在本地点击About Visual Studio Code可获得Commit id如:b3e4e68a0bc097f0ae7907b217c1119af9e03435. 实际上VSCode软件当前版本的提交的HASH值。
在服务器端可通过ls ~/.vscode-server查看vscode-server的软件目录,看以看到以Commit id命名的相应文件夹。
这时候可以删除后本地连接使自动下载,也可以去官网下载对应版本的 vscode-server 软件,手动更新,方法来自VSCode Remote 报错,无法连接??.
更新依然无法连接。
绕过密码验证
第二次尝试,查看ssh-Remote连接时使用的命令。
在VS Code中的Terminal中可以得到连接中使用的命令ssh -v -D 51465 -o ConnectTimeout=15 10.9.65.31, 尝试输入可以获取报错记录。
1 | Tenneys-Air:~ tenney$ ssh 127.0.0.1 -v |
可以看出,ssh对/dev/tty进行了多次请求访问,并全部失败。又因访问过多被拒绝。
查看/dev/tty权限发现无异常,而Terminal可以正常访问说明软件无异常。
/dev/tty是一个用于验证密码的软件,而且顺序位于密钥验证的后面。虽然没搞懂为什么,但既然提示无法访问,那就不访问,使用公钥连接而非密码就可以跳过这一步,如How do you copy the public key to a ssh-server?.
1 | # 创建计算机key |
结束后VS Code Termanal成功登录,但依然无法使用ssh-Remote.
排除终端差异
使用env > $HOME/Desktop/userenv.txt分别可以查看Termanal和VS Code Termanal的环境How to export and import environment variables in windows? - Stack Overflow以判断差异,但是无决定性差异。
升级 openssh
查阅网络确实有因系统版本导致ssh不可用的事例,考虑到使用的ssh参数可能不能被服务端支持,尝试升级ssh客户端。
ssh -V获取当前版本。
OpenSSH_7.9p1, LibreSSL 2.7.3
现在最新的OpenSSH版本是 9.1, 因此值得更新试试。
1 | # openssh update |
其中出现了一些小插曲就是openssh的依赖软件有一个叫mandoc的官网炸了上不去,所以就手动安装了其他的。但是事实上因为没有办法获得mandoc, 所以其实没有安装成功openssh, 只是把一些依赖软件安装了,但是不知道为什么,但是解决了…
其中安装的最后一个软件是automake, 所以记录一下。
疑点
ssh 的参数到底调整了什么
在Terminal中所有的参数都是可以正常使用的,但是在VS Code中除了-v以外的所有参数都会报错。可能是由于-v是查看详细信息,所以对连接过程无影响。
在使用公钥连接而非密码之后,理应绕过了/dev/tty权限的问题,但-D/-o的命令只要添加,就会报错。
为什么成功了一次
最大的疑惑就是为什么在VS Code失败的情况下为什么VS Code Insider成功了第一次,但是之后我在删除所有插件,更换旧版本乃至删除服务器.vscode文件夹都毫无反应。
实在是分不清啊…
automake 是什么
GNU Automake 是一种编程工具,可以产生供 make 程序使用的 Makefile,用来编译程序。它是自由软件基金会发起的 GNU 计划的其中一项,作为 GNU 构建系统的一部分。automake 所产生的 Makefile 符合 GNU 编程标准。
我的理解,是用来给make “make”的。
结论
能用的时候,就尽量不要瞎整,恩。
毕竟我为了这玩意毫无成就感的折腾了四天…
