引言

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Tenneys-Air:~ tenney$ ssh 127.0.0.1 -v
OpenSSH_7.9p1, LibreSSL 2.7.3
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /Users/tenney/.ssh/id_dsa
debug1: Trying private key: /Users/tenney/.ssh/id_ecdsa
debug1: Trying private key: /Users/tenney/.ssh/id_ed25519
debug1: Trying private key: /Users/tenney/.ssh/id_xmss
debug1: Next authentication method: keyboard-interactive
debug1: read_passphrase: can't open /dev/tty: Device not configured
debug1: Authentications that can continue: publickey,password,keyboard-interactive
...
Permission denied, please try again.
debug1: read_passphrase: can't open /dev/tty: Device not configured
Received disconnect from 127.0.0.1 port 22:2: Too many authentication failures
Disconnected from 127.0.0.1 port 22

可以看出,ssh/dev/tty进行了多次请求访问,并全部失败。又因访问过多被拒绝。

查看/dev/tty权限发现无异常,而Terminal可以正常访问说明软件无异常。

/dev/tty是一个用于验证密码的软件,而且顺序位于密钥验证的后面。虽然没搞懂为什么,但既然提示无法访问,那就不访问,使用公钥连接而非密码就可以跳过这一步,如How do you copy the public key to a ssh-server?.

1
2
3
4
# 创建计算机key
ssh-keygen
# 推送至服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub tenney@10.9.65.31

结束后VS Code Termanal成功登录,但依然无法使用ssh-Remote.

排除终端差异

使用env > $HOME/Desktop/userenv.txt分别可以查看TermanalVS 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
2
3
4
5
# openssh update
brew install openssh
# success
brew install automake
brew install opencc

其中出现了一些小插曲就是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 编程标准。

Automake - 维基百科,自由的百科全书

我的理解,是用来给make “make”的。

结论

能用的时候,就尽量不要瞎整,恩。

毕竟我为了这玩意毫无成就感的折腾了四天…