SSH 反向隧道可以接受非本地连接吗?

SSH 反向隧道可以接受非本地连接吗?

我的办公室有一台位于防火墙后面的服务器、一台位于 NAT 后面的家庭服务器以及一台我随身携带的笔记本电脑。有时我想从家里访问办公室服务器,所以我做了以下设置。

家庭路由器将端口 2223 重定向到家庭服务器端口 22。

我正在办公室使用 autossh 和 systemd 单元运行反向隧道:

[Unit]
Description=Call home using port 2223 and reverse tunnel 22222 into 22
After=network.target

[Service]
User=atilla
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -p 2223 -N -R 22222:localhost:22 atilla@my_home_ip

[Install]
WantedBy=multi-user.target

在我的家庭服务器上,我可以ssh -p 22222 localhost连接到办公室服务器。但是,当在家中执行 时ssh -p 22222 homeserver.local,连接会被拒绝。我总是必须登录家庭服务器并进行另一跳。

办公室服务器使用最新的Raspbian,家庭服务器使用Ubuntu 22.04,全部默认设置。

答案1

阅读相关内容后,autossh我发现除了一些标志之外,“所有其他参数都传递给 ssh“。该标志的规范ssh -R在联机帮助页中显示man ssh

-R [bind_address:]port:host:hostport

在您的配置中,您(相当合理地)省略了可选bind_address:部分,因此绑定仅适用于本地计算机。包括冒号和未定义的bind_address成为通配符*,这使得可以从任何地方访问端口(受防火墙、路由和其他网络管理层的限制)。

ExecStart=/usr/bin/autossh -p 2223 -N -R *:22222:localhost:22 atilla@my_home_ip

您可能还需要阅读并更改服务的GatewayPorts设置sshd。默认情况下,它的值为no,这会阻止您执行我刚才描述的操作。请参阅man sshd_config参考资料 获取详细信息,包括替代选项yesclientspecified。不要在没有阅读相关内容的情况下选择一个值。


回答完这个问题后,我应该指出,不受管理地进入您的办公室网络很可能违反 IT 政策,并可能导致纪律处分。特别是对于一条可以从“任何地方”访问的路线。

答案2

为了完整起见,我分享我发现的另一个解决方案:使用称为 SSH 跳转主机的功能。

有了上面的ssh隧道,这个命令就可以一次性连接到办公服务器

ssh -J homeuser@homeserver:22 -p 22222 workuser@localhost

-J标志告诉使用 user@server:port 帐户作为跳转主机,后者是来自跳转主机的 SSH 参数。

相关内容