You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重装Cygwin OpenSSH后SSH密钥异常,无法建立连接求助

解决Cygwin OpenSSH重装后SSH连接失败的问题

我之前也碰到过类似的情况——重装Cygwin的OpenSSH后,不管是跨机器还是本地SSH登录都直接断开,连密码提示都没有。结合你提到的ssh -vvv显示用了过时密钥的信息,问题大概率出在重装后密钥认证的配置/权限错误,或者服务端没有正确重置。下面是一步步的解决步骤:

1. 修复Cygwin SSH相关文件的权限

Cygwin对SSH文件的权限要求特别严格,重装后很容易出现权限混乱,导致服务端直接拒绝密钥请求:

  • 打开Cygwin终端,依次执行以下命令修复个人目录下的SSH文件权限:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_rsa
    chmod 644 ~/.ssh/id_rsa.pub
    chmod 644 ~/.ssh/authorized_keys
    
  • 还要确保系统目录/var/empty的权限正确(这是sshd运行的必要目录):
    sudo chmod 755 /var/empty
    sudo chown root:root /var/empty
    

2. 重置Cygwin SSH服务配置

重装OpenSSH后,原有的sshd配置文件和主机密钥可能被覆盖或损坏,需要重新初始化服务:

  1. 先停止当前的SSH服务:
    net stop sshd
    
  2. 运行配置向导自动生成新的主机密钥和配置:
    ssh-host-config -y
    
    过程中如果提示是否创建sshd用户、是否设置服务自动启动,直接按默认选yes就行。
  3. 重启SSH服务:
    net start sshd
    

3. 清理客户端的旧密钥缓存

不管是服务器B还是A本地,之前缓存的旧主机密钥现在已经失效了,必须清理:

  • 在服务器B的Linux终端,清理对应服务器A的旧密钥记录:
    ssh-keygen -R <服务器A的IP或主机名>
    
  • 在服务器A的Cygwin终端,清理本地的旧缓存:
    ssh-keygen -R localhost
    ssh-keygen -R <服务器A的本机IP>
    

4. 重新配置密钥认证(可选,若前几步无效)

如果还是无法通过密钥登录,可能是原密钥已经损坏,重新生成并交换:

  1. 在服务器A的Cygwin终端生成新的RSA密钥(一路回车默认,不要设置密码):
    ssh-keygen -t rsa -b 4096
    
  2. 将新的公钥添加到本地授权列表:
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    
  3. 把新的公钥复制到服务器B的~/.ssh/authorized_keys文件中(可以手动复制内容,或者用scp临时传过去)。

5. 临时开启密码登录排查(可选)

如果还是没有进入密码提示环节,可能是sshd配置禁用了密码登录,先临时开启排查:

  • 编辑sshd配置文件:
    nano /etc/sshd_config
    
  • 找到PasswordAuthentication选项,修改为:
    PasswordAuthentication yes
    
  • 重启SSH服务:
    net stop sshd && net start sshd
    
    这时候再尝试连接,如果能看到密码提示,说明问题确实在密钥认证上,解决后可以再改回no保持无密码登录的配置。

内容的提问来源于stack exchange,提问作者bobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:08:41