结论

结论

我正在尝试 ssh 端口转发,我偶然发现了一件令人困惑的事情。在我看来,以下命令正在做同样的事情:

ssh -NfL 192.168.121.215:2222:vm2.local:22 vm2.local
ssh -NfL 192.168.121.215:2223:localhost:22 vm2.local
ssh -NfL 192.168.121.215:2224:vm2.local:22 localhost

从 PC 连接到盆 2222、2223 和 2224 将我全部带到 vm2.local。

$ ss -antp # on vm1.local (192.168.121.215)
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port 
LISTEN     0      128         192.168.121.215:2222                     *:*      users:(("ssh",10170,4))
LISTEN     0      128         192.168.121.215:2223                     *:*      users:(("ssh",10178,4))
LISTEN     0      128         192.168.121.215:2224                     *:*      users:(("ssh",10225,4))
LISTEN     0      128                       *:22                       *:*      users:(("sshd",836,3))
...

上面的命令有什么区别?创建的隧道是否有些不同?根据手册页,第一个命令是正确的,第二个命令来自某个网​​站,最后一个命令是我犯的错误,结果也有效。

答案1

那里差异,即使在你的情况下并不重要。我画画不好,所以我尝试用文字来描述一下:

  1. ssh -NfL 192.168.121.215:2222:vm2.local:22 vm2.local
    

    这使得您的主机和vm2.local端口之间的连接通过此安全通道进行加密,因为每一端(本地和远程)都绑定其本地 IP 地址。

  2. ssh -NfL 192.168.121.215:2223:localhost:22 vm2.local
    

    这与上面相同,但您不绑定公共网络接口的地址,而是绑定本地接口的地址(127.0.0.1)。对于 ssh 端口,没有区别(它监听两个端口),但对于仅监听的服务很重要localhost(例如mysql)。

  3. ssh -NfL 192.168.121.215:2224:vm2.local:22 localhost
    

    这个是安全地连接到本地主机(基本上没有安全效果),然后直接绑定远程主机,因此您写入端口的所有内容2224都会直接在机器之间发送未加密的(对于 SSH 连接来说没有问题,但对于不同类型的流量来说这很重要)。

结论

您应该学习使用第二种情况,但是当不需要从外部访问转发的端口时,您应该始终绑定localhost在本地端,如下所示:

ssh -NfL localhost:2223:localhost:22 vm2.local

其中localhost是默认值,因此您可以将其归结为

ssh -NfL 2223:localhost:22 vm2.local

相关内容