玩网络隧道很有趣,而且几乎是神奇的。 SSH就是这样一个充满惊喜的工具箱,可以让你学到更多东西。
我过去经常使用SSH隧道来安全地通过VNC访问远程主机。 典型的情况是从工作连接到家用计算机并访问其桌面,我使用我的计费软件。 隧道在工作计算机上打开一个端口,该端口重定向远程主机上的所有活动,因为它是本地的。
work$ ssh -L 5901:localhost:5900 homeuser@homepc
然后在工作计算机上,端口5901成为我的homepc端口5900,实际上是它的VNC桌面。 只需在localhost:5901上打开VNC查看器即可显示homepc桌面。
但另一种方式呢? 由于大多数公司都设置阻止此类访问的防火墙,因此无法从家中访问工作计算机。
输入反向SSH。 它创建从主机到远程主机的连接,但就好像连接是相反的。 这样,连接就会在防火墙后面向外界发起,并且对远程主机指定端口保持开放状态。
work$ ssh -R 7000:localhost:22 homeuser@homepc
这将创建一个反向SSH隧道,其中homepc端口7000充当工作端口22.现在在homepc上,我可以登录到工作:
homepc$ ssh workuser@localhost -p 7000
到目前为止,这很美。 但当然我应该可以通过VNC访问我的工作桌面了吗?
事实证明,反向端口在另一个方向是透明的,因此端口转发像往常一样工作。
homepc$ ssh -L 5901:localhost:5900 workuser@localhost -p 7000
这将在我的homepc上打开端口5901,通过端口7000上的反向SSH隧道返回到工作台。 当然,在这种情况下,workuser密码是远程工作PC,即使主机是localhost也是如此。 然后,只需打开端口localhost:5901上的VNC查看器即可显示我的工作PC桌面的所有荣耀。
现实案例
上面的案例假设homepc始终打开并可从Internet访问,尽管可能,但这并不是一种非常安全和推荐的方法。 在我的情况下,我有一个我一直在使用的Raspberry Pi ,功耗低于5W,并作为NAT家庭网络的网关。 Pi运行no-ip服务,保持其动态IP可查找。 在工作中,我的工作站运行Windows,虽然我可以使用Putty来设置反向SSH连接,但是从Linux服务器执行此操作会使其在无人值守的情况下更具弹性。 所以最终的配置最终是:
workpc -- linuxhost || ooooooooo || pi -- homepc
反向SSH源于Internet上的linuxhost到Pi:
linuxhost$ ssh -fN -R 7000:localhost:22 piuser@homeip
然后从我的homepc,打开到Pi转发VNC端口的SSH连接:
homepc$ ssh -L 5901:localhost:5901 piuser@piip
最后,Pi打开与Linux主机的SSH连接,将VNC端口转发到我的workpc,全部通过反向SSH隧道:
pi$ ssh -L 5901:workpc:5900 workuser@localhost -p 7000
然后从homepc,只需打开一个VNC查看器就可以获得工作桌面:
homepc$ vncviewer localhost:1
https://patocarr.com/blog/2016/02/06/VNC_over_reverse_SSH.html |