SSH 隧道:connect_to localhost 端口 22:失败

SSH 隧道:connect_to localhost 端口 22:失败

我想使用中间服务器(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

在远程计算机中。

相关内容