我知道如何使用 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 上攻擊你的機器,這應該可以做到。
這可能對您的具體問題沒有幫助,但我想很多人都會因為這個原因而來到這裡。
答案4
基於 Hauke Laging 的無容器答案,在執行 ssh 用戶端之前新增此 iptables 規則就足夠了:
iptables -t nat -A POSTROUTING -d <remotehostip> -p tcp --dport 22 -j SNAT --to-source :1234
ssh 會話開啟後可以刪除該規則。