我有一台位于 NAT 后面的 Raspberry Pi(远程)。为了从我的家用计算机(本地)访问它,我通过反向隧道将其连接到我的 ASW 服务器(服务器),如各种帖子中所述。
远程连接到服务器:
ssh -f -N -T -R22222:localhost:22 -i ssh-ec2/ec-key.pem [email protected]
然后我可以通过 SSH 连接到我的 ASW 服务器,登录后,我可以通过以下方式连接到我的 Raspberry:
ssh -p 22222 pi@localhost
一切正常。
我现在的问题是,我想从本地直接使用 intellij 与远程 Raspberry 进行远程会话。为此,我需要通过 SSH 连接到我的服务器,然后再次手动输入连接到我的远程。
如何设置隧道以便可以连接到我的服务器,但直接连接到端口22222
?我已从本地计算机尝试了以下操作,但连接超时:
ssh -l 9999:localhost:22222 [email protected] -i c:/privatekey.pem
有什么建议我做错了吗?抱歉,我对 Linux 完全陌生,所以如果这是一个愚蠢的问题,请原谅。
答案1
当您从 ASW 服务器连接时,您将连接到localhost
。请注意man 1 ssh
说:
-R [bind_address:]port:host:hostport
[…]
默认情况下,服务器上的侦听套接字将仅绑定到环回接口。这可以通过指定 来覆盖
bind_address
。空的bind_address
或地址*
表示远程套接字应侦听所有接口。仅当启用bind_address
服务器的选项时,指定远程才会成功(请参阅)。GatewayPorts
sshd_config(5)
GatewayPorts
指定是否允许远程主机连接到为客户端转发的端口。默认情况下,
sshd(8)
将远程端口转发绑定到环回地址。这可以防止其他远程主机连接到转发端口。GatewayPorts
可用于指定sshd
应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。该参数可能是no
强制远程端口转发仅对本地主机可用,yes
强制远程端口转发绑定到通配符地址,或clientspecified
允许客户端选择转发绑定到的地址。默认值为no
。
为了使它工作你应该做这样的事情:
- 包括
GatewayPorts clientspecified
在sshd_config
服务器上(并重新启动/重新加载守护进程,请参阅是否有配置备份ssh
,以便在发生错误时回滚?,重新启动是否sshd
总是保持现有会话有效?和在仅以 SSH 为访问模式的计算机上重新启动 SSH(英文): ssh … -R :22222:localhost:22 …
从 Raspberry连接(注意第一个:
,它将空bind_address
与分开port
)。