Proxy

使用 ProxyCommand 通過多個主機進行 SSH?

  • July 10, 2021

我在家裡的電腦上的 ~/.ssh/config 中有一個條目,如下所示:

host foo bar
   ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

gateway.example.com連接到公共 Internet 和內部網路的工作伺服器在哪裡。網關框使用 /etc/hosts 中的條目解析 foo 和 bar。

我的問題是我需要到達位於foo. 讓我們稱之為“baz”。“baz”主機位於 foo 連接到的另一個專用網路上,但不是“網關”連接到的專用網路。

我試過用這個:

host baz
   ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

但這不起作用,而且我有點超出我的深度。我該怎麼做呢?

我認為這無關緊要,但我在 Ubuntu 10 中這樣做。

簡單的。

假設以下網路設置:

範例網路設置

您應該能夠使用看起來像這樣的 ~/.ssh/config 文件:

host foo bar
   ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
   ProxyCommand ssh -x -a -q foo nc %h 22

這裡的想法是您的 SSH確實知道如何到達“foo”,因此那裡的 SSH 會成功。從那裡,你可以“nc”到 baz。如果“baz”旁邊的內部專用網路上還有其他主機,您可以將它們添加到“host baz”行。

在比 5.4 更新的 OpenSSH 版本中(此時都應該如此),您可以使用-W命令而不是 exec 來執行外部nc命令,當然您可以將選項打包在一起:

host foo bar
   ProxyCommand ssh -xaqW%h:22 gateway.example.com

host baz
   ProxyCommand ssh -xaqW%h:22 foo

在這兩種情況下,這都將主機“foo”視為“baz”的網關,就像“gateway”是“foo”的網關一樣。

清除?

引用自:https://serverfault.com/questions/368266