Mac VS CODE 无法 ssh-remote

2023-07-22 07:15:55 浏览数 (2)

引言

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, 尝试输入可以获取报错记录.

代码语言:shell复制
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?.

代码语言:shell复制
# 创建计算机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, 因此值得更新试试.

代码语言:shell复制
# 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"的.

结论

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

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

0 人点赞