问题描述
废话不多说,我的情况是我有两个之前已经在vscode的remote-ssh插件中已经配置并且已经连接过的服务器,但是在这两个服务器重装系统之后却无法链接,而使用Xshell和自带的命令行窗口是能够正常了连接的。
解决方案
先说解决方案,在你的windows命令窗口输入:
ssh-keygen -R 服务器IP
回车执行然后重新使用vscode连接就行了。
原因分析
光解决问题还不够,咱还得知道问题是如何产生的。
可以看一下vscode的控制台输出: 这里的意思是主机密钥验证失败,因为remote-ssh连接背后的原理是在服务器上装一个vscode-server来进行通信,由于目前我们的服务器已经重装了,因此需要重新下载vscode-server。
但是很不巧,安装这个软件vscode需要首先通过我们的终端来连接到服务器,然后在服务器上下载,问题就出在了这一步,由于服务器已经重装了,这时候windows电脑上保存的对应主机的指纹和现在主机的指纹不匹配了,这会被判定为存在一些肮脏的行为(认为你的行为存在被攻击的风险。)所以被强行截断。
而为了解决这个问题,我们只需要把本地保存的指纹给清除掉就行了,所以执行ssh-keygen -R 来删除本地保存的对应主机的公钥,当公钥已经删除之后,code认为我们曾经没有访问过这台主机,因此就不再进行指纹匹配。
再扩展一下,ssh-keygen -R 是用来从 known_hosts 文件中删除特定主机的条目的命令。而known_hosts 文件用于存储已知主机的公钥,它通常位于用户的 ~/.ssh/known_hosts 文件中。因此如果你不想执行命令也可以手动去删除对应的记录。
例如我还有一台服务器还没有删除公钥条目,打开 ~/.ssh/known_hosts这个文件: 搜索找到这个主机对应为记录,并且删除。 重新连接,弹出此窗口则已经可以正常连接:
评论前必须登录!
注册