我知道如何使用 ssh 连接“到”某个端口。
ssh user@remotehostip -p XXX
有没有办法建立ssh从我的本地计算机将使用的端口?
答案1
这并不容易实现。如何做到这一点取决于在哪里可以看到源端口:在本地也是如此,还是从外部网络的角度来看它是正确的端口就足够了?
您可以在 LXC 容器中运行 SSH 客户端。我从来没有这样做过,所以我无法向你详细解释。但是您创建一个虚拟网络接口并将其附加到此容器,以便ssh
使用此接口,因为它是它看到的唯一(外部)接口。
在主机系统上,应该能够检测到来自该接口的数据包。因此,您可以使用 Netfilter 的 NAT (SNAT) 来重写源地址,如下所示:
iptables -t nat -A POSTROUTING -o vnet0 -p tcp --dport 22 -j SNAT --to-source :1234
当然,如果您连接到 22 以外的端口,则这不起作用(或变得更加复杂)。
答案2
您正在寻找的命令语法可能是这样的。 ssh -p XXX user@remotehostip 您必须更改选项的顺序。现在尝试一下,它对我有用。此致。
答案3
如果您通过路由器进行端口转发,一个简单的解决方案是将入站端口设置为您想要的任何端口,并将本地端口设置为 22。您的计算机仍将像平常一样在 22 上进行 ssh 连接,但实际上是从网络外部进行连接您将使用您的入站端口。如果你只是想阻止机器人在 22 上攻击你的机器,这应该可以做到。
这可能对您的具体问题没有帮助,但我想很多人都会因为这个原因而来到这里。
答案4
基于 Hauke Laging 的无容器答案,在执行 ssh 客户端之前添加此 iptables 规则就足够了:
iptables -t nat -A POSTROUTING -d <remotehostip> -p tcp --dport 22 -j SNAT --to-source :1234
ssh 会话打开后可以删除该规则。