1

有一个主机 A 无法从我的本地网络访问。但是我可以通过 SSH 访问主机 B,并且 B 可以看到 A。所以我设置了一个 SSH 隧道并尝试通过 B 访问 A

ssh -N -D 7070 username@HOST_B

我的 ~/.ssh/config 看起来像

host HOST_A
    ProxyCommand socat - PROXY:127.0.0.1:7070:%h:%p,proxyport=7070

当我运行以下命令时

ssh -v username@HOST_A

我收到以下错误。

debug1: identity file /Users/leo/.ssh/id_rsa type -1
debug1: permanently_drop_suid: 501
debug1: identity file /Users/leo/.ssh/id_rsa-cert type -1
debug1: identity file /Users/leo/.ssh/id_dsa type 2
debug1: identity file /Users/leo/.ssh/id_dsa-cert type -1
2013/05/21 22:19:13 socat[4537] E proxy_connect: connection closed by proxy
ssh_exchange_identification: Connection closed by remote host

我的机器上没有 /etc/hosts.allow 或 /etc/hosts.deny 。我正在使用 mac 操作系统。

4

1 回答 1

2

您要求socat连接到 HTTP 代理,但您设置的 ssh 隧道是 SOCKS 代理。告诉socat连接到 SOCKS 代理:

host HOST_A
    ProxyCommand socat - SOCKS4:127.0.0.1:7070:%h:%p,proxyport=7070

(其他 SOCKS 选项可能可用 --- 检查man socat您安装的特定 socat。)

但通常你不想提前设置 ssh 隧道。通常的方法是在 HOST_B 上使用 netcat:

host HOST_A
    ProxyCommand /usr/bin/ssh username@HOST_B /bin/nc %h %p

(根据需要将路径名更改为 ssh 和 netcat。)

端庄的ssh -t HOST_B ssh HOST_A方法也可以,但不能在~/.ssh/config.

于 2013-05-21T16:25:28.620 回答