host key 验证失败

由于 SSH 连接时的 host key 经常会验证失败,出现下面的报错:

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
> Someone could be eavesdropping on you right now (man-in-the-middle attack)!
> It is also possible that a host key has just been changed.
> The fingerprint for the ED25519 key sent by the remote host is
> SHA256:BujDbEmvfIFH85uE0Zs7QvDnQwgJvU8sAQV0DFDxYSw.
> Please contact your system administrator.
> Add correct host key in C:\\Users\\hp/.ssh/known_hosts to get rid of this message.
> Offending ECDSA key in C:\\Users\\hp/.ssh/known_hosts:10
> Host key for [60.245.128.10]:65010 has changed and you have requested strict checking.
> Host key verification failed.
> C:\windows\System32\OpenSSH\scp.exe: Connection closed

远程主机的身份密钥已更改,而本地的 known_hosts 文件中仍保存着旧的密钥,导致 SSH 客户端拒绝连接。可以关闭StrictHostKeyChecking选项。

config:

Host XXX
  HostName XXX.XXX.XXX.XXX
  Port XXXXX
  User XXX
  StrictHostKeyChecking no
  UserKnownHostsFile NUL

远程主机的linux系统版本过低

使用1.99以后的新版本vscode时,会出现问题:

在这里插入图片描述

输出日志:

The following issues were detected in your most recent Remote - SSH session 
Ctrl+click on an issue to continue in Copilot Chat. 
╔══════════════╤═══════════════════════════════════════════════╤═══════════════════════════════════════════════╤═══════════════════════════════════════════════╗
║    Status    │ Message                                       │ Mitigations                                   │ Resources                                     ║
╟──────────────┼───────────────────────────────────────────────┼───────────────────────────────────────────────┼───────────────────────────────────────────────╢
║ LinuxPrereqs │ The remote host may not meet VS Code Server's │ • https://aka.ms/vscode-remote/faq/old-linux  │ •                                             ║
║              │ prerequisites for glibc and libstdc++ (The    │                                               │ https://aka.ms/vscode-remote/linux-           ║
║              │ remote host does not meet the prerequisites   │                                               │ prerequisites                                 ║
║              │ for running VS Code Server)                   │                                               │                                               ║
╚══════════════╧═══════════════════════════════════════════════╧═══════════════════════════════════════════════╧═══════════════════════════════════════════════╝
See verbose information in the Output Log...

需要下载旧版本的vscode,可以参考:https://www.cnblogs.com/xuhe2/p/18812489

插件不兼容导致的错误

在重新安装低版本的vscode以后,由于插件缓存没有被清理,在重新安装ssh插件以后无法正常使用

出现报错:

There is no data provider registered that can provide view data.

解决方法:手动清理vscode插件缓存,删除以下目录

C:\Users\hp\AppData\Roaming\Code

ssh配置文件权限设置问题

报错:

远程连接时出现下面的报错:0:44:33.721] > Bad permissions. Try removing permissions for user: \\Everyone (S-1-1-0) on file C:/Users/hp/.ssh/config.
[20:44:33.745] > Bad owner or permissions on C:\\Users\\hp/.ssh/config
> 过程试图写入的管道不存在。
[20:44:35.050] "install" terminal command done
[20:44:35.051] Install terminal quit with output: 过程试图写入的管道不存在。
[20:44:35.051] Received install output: 过程试图写入的管道不存在。
[20:44:35.052] WARN: $PLATFORM is undefined in installation script output.  Errors may be dropped.
[20:44:35.052] Failed to parse remote port from server output
[20:44:35.054] Resolver error: Error: 
	at y.Create (c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:744751)
	at t.handleInstallOutput (c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:742832)
	at t.tryInstall (c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:865534)
	at async c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:824246
	at async t.withShowDetailsEvent (c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:827501)
	at async A (c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:820760)
	at async t.resolve (c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:824898)
	at async c:\Users\hp\.vscode\extensions\ms-vscode-remote.remote-ssh-0.120.0\out\extension.js:2:1113660
[20:44:35.062] ------




[20:44:35.063] No hints found in the recent session.

这个错误是由于本地 Windows 系统上 SSH 配置文件 C:\Users\hp.ssh\config 的权限设置不正确导致的。SSH 客户端要求该文件只能由当前用户拥有,并且不能有 Everyone 等额外的用户权限。

解决方案:

打开C:\Users\hp.ssh 文件夹,找到 config 文件(无扩展名)。右键点击 config,选择 属性。

切换到 安全 选项卡,在“组或用户名”列表中,查找是否存在名为 Everyone 的条目。

如果存在,选中它,然后点击 删除。如果无法删除,可以点击 高级,在权限条目中选择 Everyone,点击 禁用继承(选择“将已继承的权限转换为此对象的显式权限”),然后删除 Everyone。

确保列表中只有你的用户名(如 hp)和系统账户(如 SYSTEM、Administrators),且你的用户对文件有 完全控制 或 读取/写入 权限。

点击 确定 保存更改。

添加公匙以后仍然要输入密码

这可能是因为私钥文件权限过高,Windows 下如果用户端的私匙文件被其他用户/组访问,SSH 会拒绝使用该私钥,转而要求密码:

解决步骤:

  1. 右键 C:\Users\你的用户名.ssh\私匙文件(比如id_ecdsa) → 「属性」→ 「安全」→ 「高级」;
  2. 点击「禁用继承」→ 选择「从此对象中删除所有继承的权限」;
  3. 点击「添加」→ 「选择主体」→ 输入你的 Windows 用户名(比如 ZhangSan)→ 「确定」;
  4. 给该用户勾选「完全控制」「读取」「写入」,删除其他所有用户 / 组的权限;
  5. 点击「确定」保存,重新在 VS Code 连接。

更多推荐