【解决方案】在Windows11上配置SSH免密登录

要在 Windows 11 上实现 SSH 免密登录,关键在于将你 Linux 机器的 公钥(Public Key) 正确配置到 Windows 的 OpenSSH 服务器中。

Windows 的 OpenSSH Server 有一个特殊的权限机制,导致配置比 Linux 稍微复杂一点。请按照以下步骤操作:

第一步:获取你 Linux 机器的公钥

可以随时在终端运行 cat ~/.ssh/id_ed25519.pub 来查看它。

第二步:在 Windows 11 上配置公钥

你需要登录到那台 Windows 11 电脑上进行操作。

注意: Windows 对 管理员用户普通用户 的配置路径是不同的。

情况 A:如果你登录的是管理员账户(Administrator 组成员)

这是最常见的情况,也是最容易出错的情况。

  1. 找到文件:C:\ProgramData\ssh\administrators_authorized_keys
    • 如果文件夹 C:\ProgramData\ssh 不存在,请确保你安装了 OpenSSH Server。
    • 如果文件 administrators_authorized_keys 不存在,请创建一个(注意没有后缀名)。
  2. 粘贴公钥:使用记事本打开该文件,将第一步中的公钥粘贴进去,保存。
  3. 设置权限(关键步骤):此文件权限必须非常严格,否则 SSH 会拒绝读取。
    • 右键点击文件 -> 属性 -> 安全 -> 高级
    • 禁用继承 -> 选择“将已继承的权限转换为此对象的显式权限”。
    • 删除除了 SYSTEMAdministrators 以外的所有用户权限。
    • 确保 SYSTEM 和 Administrators 拥有“完全控制”权限。

情况 B:如果你登录的是标准普通用户

  1. 找到文件:C:\Users\你的用户名\.ssh\authorized_keys
    • 如果目录或文件不存在,请创建。
  2. 粘贴公钥:将公钥粘贴进去保存。
  3. 设置权限:确保只有 System、Administrators 和 你自己 对该文件有访问权限。

第三步:检查 SSH 配置文件 (sshd_config)

在 Windows 上打开 C:\ProgramData\ssh\sshd_config(需要管理员权限):

  1. 确保以下行没有被注释(去掉前面的 #):
    PubkeyAuthentication yes
    
  2. 关于管理员的特殊配置
    在文件底部,通常有这样一段默认配置:
    Match Group administrators
           AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
    
    这就是为什么管理员用户必须使用 C:\ProgramData\ssh\ 下的文件,而不能用用户目录下的文件。如果你希望管理员也能用用户目录下的 .ssh/authorized_keys,可以注释掉这几行,但推荐保持默认并按“情况 A”操作

第四步:重启 SSH 服务

在 Windows 的 PowerShell(管理员模式)中运行:

Restart-Service sshd

第五步:测试连接

回到你的 Linux 终端,尝试连接:

ssh <windows用户名>@<windows-ip>

现在应该可以直接登录而无需密码了。


如果仍然需要密码:
通常是因为权限问题。你可以查看 Windows 事件查看器(Event Viewer) -> 应用程序和服务日志 -> OpenSSH -> Admin/Operational,或者在 Linux 上使用 ssh -v <user>@<host> 查看详细的调试信息,看是在哪一步被拒绝的。

需要我解释如何查看调试日志吗?

posted @ 2025-12-16 18:23  知码匠  阅读(5)  评论(0)    收藏  举报