SSH - 尝试配置多跳连接时出现“管道断裂”错误

SSH - 尝试配置多跳连接时出现“管道断裂”错误

我有两个 SSH 服务器:ServerA 支持基于密钥的身份验证,可以从我的工作站访问;ServerB 仅支持基于密码的身份验证,只能从 ServerA 访问。我的目标是从我的工作站通过 SSH 访问 ServerB,但我收到了一个非常无用的错误。这是我的~/.ssh/config文件:

Host ServerA
    HostName 10.8.0.1
    User ubuntu
    Port 22
    IdentityFile ~\.ssh\id_server_a.pem

Host ServerB
    ServerAliveInterval 120
    HostName 12.34.56.78
    User myuser
    Port 12221
    ProxyCommand ssh -W %h:%p ServerA

这应该可以工作,但是当我输入命令时ssh ServerB,出现以下错误:

/bin/sh: No such file or directory
banner exchange: Connection to UNKNOWN port 65535: Broken pipe

我已经测试了两个 SSH 连接,因为我能够使用密钥明确连接到 ServerA,并且从 ServerA 的 shell 我能够使用端口、用户名和密码连接到 ServerB。

这个错误源自哪里(工作站,服务器 A 还是服务器 B)?我能做些什么来修复它?

答案1

如果客户端系统是 Mac - 那么 Ventura 升级可能是原因。

根据 OP 问题的时间,这似乎很有道理。
将我的 Mac 升级到 Ventura (MacOS 13.4) 导致 ssh 中断,并出现非常相似的错误:

Infinite reexec detected; aborting
banner exchange: Connection to UNKNOWN port 65535: Broken pipe

一个重要的警告——我使用 PIV(智能卡)进行身份验证

在与 IT 支持人员进行故障排除后,解决方案如下:

  1. 删除/注释掉PKCS11Provider你的~/.ssh/config
  2. 运行以下命令:
    ssh-add -e /usr/lib/ssh-keychain.dylib
      #Note - above command may produce the error:  
      #   'Could not remove card "/usr/lib/ssh-keychain.dylib": agent refused operation'
      #This can be ignored; the file simply has no items to remove
    ssh-add -D
    killall -9 ssh-agent
    ssh-add -s /usr/lib/ssh-keychain.dylib
    
  3. 你现在应该能够 ssh

笔记如果 ssh 仍然失败-killall应该清除所有缓存的 ssh 进程/密钥/等等。重新启动肯定会清除任何可能造成干扰的缓存数据。

相关内容