向遠端 ssh 連接埠轉送傳遞參數

向遠端 ssh 連接埠轉送傳遞參數

我有一個位於兩個網關後面的遠端伺服器,如圖所示。gw1向外界開放,而gw2只能從 訪問gw1Server只能從多個可能的伺服器之一訪問gw2,並且它可以是多個可能的伺服器之一。我想透過配置連接埠轉發,ssh以便443從我的客戶端電腦自動轉發到2000on gw1。這不是問題。我有:

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

這非常有效。現在我想2000gw1轉發到到時443通過。我可以:Servergw2sshgw2

HostName gw2
LocalForward 2000 Server:443

無論如何,我是否可以將伺服器的 IP 作為參數傳遞,因為它每次都可能不同?

網路設定

答案1

假設您不關心連接埠 2000。假設您有主機 server1、server2、server3,... 擔任伺服器角色。如果將其新增至 .ssh/config 中:

Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443

然後,例如,ssh server1將透過 gw1 連接到 gw2,並將 443 從那裡轉發到 server1。

其作用:ProxyCommand告訴 ssh 首先連接到 gw1 並將標準輸出透過管道傳輸到nc gw2 22,後者將該流轉送到連接埠22 上的gw2。 。然後 ssh 透過該隧道開啟第二個 ssh 會話到 gw2。建立後,LocalForward會將連接埠 443 轉送到 server1(%h即您在命令列中提供的主機名稱)。

請參閱 man ssh_config 以了解 Match 和 ProxyCommand。

請注意,雖然命令是ssh server1,但這實際上僅將 ssh 連接到 gw2,然後僅從那裡轉發連接埠 443。 shell 將在 gw2 上打開,而不是在 server1 上開啟。因此,您可能想要ssh -N server1改為運行,以避免開啟 shell,因為目標實際上只是轉送連接埠。不幸的是,.ssh/config 中沒有與 -N 等效的選項,但您可以添加類似的內容LocalCommand wait來實現相同的效果 - shell 只會等到中斷,並且不會出現 shell 提示符。

相關內容