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”的。
结论
能用的时候,就尽量不要瞎整,恩。
毕竟我为了这玩意毫无成就感的折腾了四天…