我有两个 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 支持人员进行故障排除后,解决方案如下:
- 删除/注释掉
PKCS11Provider
你的~/.ssh/config
- 运行以下命令:
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
- 你现在应该能够 ssh
笔记:如果 ssh 仍然失败-killall
应该清除所有缓存的 ssh 进程/密钥/等等。重新启动肯定会清除任何可能造成干扰的缓存数据。