我想使用中间服务器(u 端口转发)从我的计算机连接到远程计算机。我在远程计算机上运行此命令:
ssh -R 9300:localhost:22 user@middleserver
我的系统上有这个:
ssh remoteuser@middelserver -p 9300
但我的系统上出现此错误:
ssh_exchange_identification: Connection closed by remote host
这是远程计算机的日志:
debug1: client_request_forwarded_tcpip: listen localhost port 9309, originator xxx.xxx.xx.xx port 21470
debug2: fd 7 setting O_NONBLOCK
debug1: connect_next: host localhost ([::1]:22) in progress, fd=7
debug2: fd 7 setting TCP_NODELAY
debug3: fd 7 is O_NONBLOCK
debug3: fd 7 is O_NONBLOCK
debug1: channel 1: new [xx.xx.xx.xx]
debug1: confirm forwarded-tcpip
debug3: channel 1: waiting for connection
debug1: channel 1: connection failed: Connection refused
debug2: fd 8 setting O_NONBLOCK
debug1: connect_next: host localhost ([127.0.0.1]:22) in progress, fd=8
debug2: fd 8 setting TCP_NODELAY
debug3: channel 1: waiting for connection
debug1: channel 1: connection failed: Connection refused
connect_to localhost port 22: failed.
debug2: channel 1: zombie
debug2: channel 1: garbage collecting
debug1: channel 1: free: xxx.xxx.xxx.xxx, nchannels 2
debug3: channel 1: status: The following connections are open:
#0 client-session (t4 r2 i0/0 o0/0 fd 4/5 cc -1)
有什么问题?
答案1
(您报告的错误表明下面步骤 1 中存在问题)
首先,按照上面海报提到的操作:添加GatewayPorts yes
到 /etc/ssh/sshd_config 并将 ssh -R 行更改为
ssh -vvv -R *:9300:localhost:22 user@middleserver
(在我们开始工作后删除 -vvv )
*将绑定地址设置为 * 将转发任何接口上的连接,而不仅仅是环回(“lo”,其中包括 127.0.0.1 == localhost )。 ifconfig
列出接口.. 即 eth0、lo 和 wlan0.*
如果这不起作用,请排除故障:
步骤1) 确保您可以通过 ssh 连接到远程计算机:
在远程机器本身上尝试:
ssh localhost
如果显示连接被拒绝,那么您必须在该计算机上启用 ssh。
如果成功,请键入ifconfig
并记下本地“inet 192.168.xxx.yyy”地址。
第2步)从本地计算机尝试 SSH
接下来,转到与远程计算机位于同一本地网络上的计算机,并尝试通过 ssh 连接到远程计算机:ssh [email protected]
如果不成功,请检查远程计算机的防火墙(见下文)。
如果成功的话
步骤3) 从中间人机器尝试 ssh
登录中间人机器并直接从那里尝试 ssh 连接。在上面的情况下,您已经ssh -R *:9300:localhost:22 middleuser@middleserver
在远程计算机上运行,因此您需要登录到中间计算机并运行: ssh remoteuser@localhost -p 9300
如果成功,则问题可能出在您服务器上的防火墙上:
在使用 iptables 之前,请先检查一下您是否使用了防火墙管理器。例如检查“ufw”是否正在使用:sudo ufw status
。使用 ufw 比直接搞乱 iptables 容易得多。
iptables -L
并检查端口 9300 是否打开(这将涉及 iptables 的一些研究......这并不简单)。作弊:如果端口 9300 列在 http 旁边,并以类似的方式检查 http 是否打开。如果下面列出了 9300,那么如果在其前面列出了“拒绝全部”类型的指令,则可能无法到达该地址。它也可能被列为指定端口。cat /etc/services | grep 9300
但在这种情况下并没有提出名字
步骤4)再次尝试登录:
ssh remoteuser@middleserver -p 9300
答案2
如果sshd
您的中间服务器上的配置选项未GatewayPorts
设置为 yes (默认为 no view man 5 sshd_options
),那么您将必须在转发上指定绑定地址:
ssh -R *:9300:localhost:22 user@middleserver
(您可以指定本地计算机的 IP 地址以使其更具限制性)。
如果没有的话,只有环回设备会在中间服务器上转发。
答案3
就我而言,我的问题比OP的问题简单得多。我只需要这样做:
sudo apt install openssh-server
在远程计算机中。