![使用 ProxyCommand 的 SSH 永远无法连接](https://linux22.com/image/222883/%E4%BD%BF%E7%94%A8%20ProxyCommand%20%E7%9A%84%20SSH%20%E6%B0%B8%E8%BF%9C%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5.png)
我正在尝试让我的 SSH 连接通过米特普罗西使用以下 SSH 配置文件:
Host test
HostName 10.0.0.246
User testssh
ProxyCommand socat - PROXY:10.0.0.211:%h:%p,proxyport=9090
这会产生以下详细输出,并且连接在最后一行之后挂起:
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /home/ubuntu/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Executing proxy command: exec socat - PROXY:10.0.0.211:10.0.0.246:22,proxyport=9090
debug1: identity file /home/ubuntu/.ssh/id_rsa type 0
debug1: identity file /home/ubuntu/.ssh/id_rsa-cert type -1
debug1: identity file /home/ubuntu/.ssh/id_ecdsa type -1
debug1: identity file /home/ubuntu/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/ubuntu/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/ubuntu/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/ubuntu/.ssh/id_ed25519 type -1
debug1: identity file /home/ubuntu/.ssh/id_ed25519-cert type -1
debug1: identity file /home/ubuntu/.ssh/id_ed25519_sk type -1
debug1: identity file /home/ubuntu/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/ubuntu/.ssh/id_xmss type -1
debug1: identity file /home/ubuntu/.ssh/id_xmss-cert type -1
debug1: identity file /home/ubuntu/.ssh/id_dsa type -1
debug1: identity file /home/ubuntu/.ssh/id_dsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
我在控制台中看不到任何连接mitmproxy
。然而,只需运行socat - PROXY:10.0.0.211:%h:%p,proxyport=9090
,实际上就建立了连接,我可以在代理控制台中看到它:
$ socat - PROXY:10.0.0.211:10.0.0.246:22,proxyport=9090
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.3
我也尝试过使用corkscrew
和nc
,但两者都有相同的行为——SSH 挂起,但直接调用命令建立连接。
看来连接永远挂起,没有来自 ssh 的进一步日志。我可以尝试做什么进一步调试?
编辑:如果我删除设置,机器可以直接连接,没有任何问题ProxyCommand
。
编辑:根据man ssh_config
:
该指令与 nc(1) 及其代理支持结合使用非常有用。例如,以下指令将通过 192.0.2.0 处的 HTTP 代理进行连接:
ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
正如前面提到的,我已经尝试过这个和更多,但没有什么区别:
Host test
HostName 10.0.0.246
User testssh
#ProxyCommand corkscrew 10.0.0.211 9090 %h %p
#ProxyCommand socat - PROXY:10.0.0.211:%h:%p,proxyport=9090
ProxyCommand /usr/bin/nc -X connect -x 127.0.0.1:8080 %h %p
答案1
看起来这确实是代理服务器本身不知道如何处理 SSH 隧道的情况。我能够从代理的日志中验证它是否遇到了错误并终止了连接的远程部分,但使客户端保持打开状态并挂起。这就解释了为什么 SSH 的冗长无法提供任何答案。