
我有一台筆記型電腦,顯然有時可以在我的家庭網路內部或外部。當我需要透過 SSH 連接到網路內的電腦時,連接相當簡單:
localhost $ ssh machinelearning
當我嘗試從以下位置存取機器時外部我的網絡,然後我需要連接到我的路由器,然後從那裡連接 SSH:
localhost $ ssh router.mytotallyuniquedomain.com
router $ ssh machinelearning
我記得有一個執行後一個命令的快捷方式~/.ssh/config
,但目前我不記得它是什麼。
有沒有辦法讓我提供多個主機名稱或連線類型,以便當我這樣做時:
$ ssh machinelearning
SSH 將首先嘗試連接到machinelearning
本地網路中的主機,然後嘗試通過隧道進入router.mytotallyuniquedomain.com
,所有這些都不需要我輸入長主機名稱?
答案1
方法#1 - ProxyCommand 和 netcat
我在我的中使用這個設定$HOME/.ssh/config
來促進這一點:
Host intserver1-o intserver2-o intserver3-o
ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p
然後我就可以ssh intserver2-o
從任何地方進入這個內部伺服器。當我在家時使用 LAN ssh intserver1
。
筆記:上述技巧需要nc
在 extserver1 上安裝 netcat ( )。
方法#2 - 嵌套 ssh
或者,您也可以使用此方法:
$ ssh -t -l gatewayuser gatewayserver "ssh -l serveruser internalserver"
您基本上是在這個方法中嵌套 SSH 呼叫。
方法 #3 - ProxyCommand & ssh -W
對於較新版本的 SSH (5.4+),您可以使用ssh
而不是nc
透過-W
交換器。
Host TARGETHOST
ProxyCommand ssh -W %h:%p PROXYHOST
&%h
是%p
用於 的主機名稱連接埠的巨集TARGETHOST
。