我正在考慮擁有一個 SSH 代理伺服器或其他稱為跳轉主機的想法,我將用它來連接到我的所有“隱”伺服器.所以基本上我有以下設定。請注意,我在這裡故意使用 IP 位址而不是主機名稱。
<client> ---> <proxy_ssh> ---> <192.168.0.*>
我的意圖是它應該對使用者盡可能透明。因此理想情況下使用者只需執行以下命令
# ssh [email protected]
為了使其正常工作,我創建了以下.ssh/config
.
Host *
ServerAliveInterval 240
Compression yes
ForwardAgent yes
ForwardX11 yes
Host 192.168.0.*
ProxyCommand ssh my_user@proxy_ssh.example.com netcat -w 120 %h %p
這很好用。但如果我的proxy_ssh
伺服器後面有更多的網路可以使用,那就有點無聊了。所以我嘗試簡單地將其添加ProxyCommand
到Host *
不起作用的部分。
我想讓這對最終用戶更加透明,並將 ssh 配置更改為以下內容,只是省略了特定的主機定義。
Host *
ServerAliveInterval 240
Compression yes
ForwardAgent yes
ForwardX11 yes
ProxyCommand ssh my_user@proxy_ssh.example.com netcat -w 120 %h %p
這導致我無法再連接到終端主機。連接只是超時了!
因此,我的問題是,有什麼方法可以讓我的所有 SSH 連線都使用主機,使其更加透明proxy_ssh
?
答案1
上面的範例將使其遞歸,每個連線都將使用代理命令,這又是帶有另一個代理命令的 ssh。 DOS 代理的好方法。
您應該從清單中排除代理,使用-F /dev/null
忽略代理命令的配置或僅忽略代理 ssh 的代理命令:
ProxyCommand ssh -oProxyCommand=none my_user@proxy_ssh.example.com netcat -w 120 %h %p
答案2
在跳轉主機的配置中新增一個項目來覆蓋代理命令:
Host proxy_ssh.example.com
ProxyCommand none
否則它將嘗試使用代理命令來存取跳轉主機本身。