引言
将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
, 尝试输入可以获取报错记录.
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?.
# 创建计算机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
分别可以查看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, 因此值得更新试试.
# 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"的.
结论
能用的时候, 就尽量不要瞎整, 恩.
毕竟我为了这玩意毫无成就感的折腾了四天...