Ssh
SSH 到兩個地址,使用第一個連接的地址
我有一台家用電腦(我們稱它為franklin,因為我就是這麼稱呼它的),我經常從我的工作筆記型電腦 ssh 進入。當我在家時,我 ssh 到 franklin.local,當我在工作或其他任何地方時,我 ssh 到 remote.address.of.franklin。
我想在我的個人資料中有一個功能,該功能始終以正確的方式連接到這種情況。我的網路狀況經常發生變化(有線與無線、不同的 SSID 等),所以我不希望通過檢測網路狀態來做到這一點,而是:
- 如果 franklin 在本地可用,請在本地連接,
- 否則,遠端連接
這是我現在使用的:
function franklin () { ping -c 5 "franklin.local" > /dev/null if [[ $? != 0 ]] then echo "franklin not available on local, so trying remote connection" ssh -p 22 remote.address.of.franklin else echo "franklin available on local network, so trying local connection" ssh username@franklin.local fi }
問題是,ping 需要時間。**我的問題是:**我可以同時執行兩個 ssh 命令,然後自動使用先連接的那個嗎?
OR
從你的shell中嘗試一個簡單的怎麼樣?ssh username@franklin.local || ssh -p 22 remote.address.of.franklin
我對 ZSH 不是很熟悉,但我猜評估邏輯仍然是惰性的,這意味著只有在第一部分失敗時才會評估第二部分。當然,第一個命令可能會暫停一段時間,試圖確定是否
franklin.local
可用。您可以將該命令分配給別名以縮短它(就像您對函式所做的那樣)。
我使用
nc
而不是 ping:franklin() { local host=franklin.local if nc -w1 $host 22 &>/dev/null; then echo "connecting locally" else echo "connecting remotely" host=remote.address.of.franklin fi ssh username@$host "$@" }
我添加
"$@"
到 ssh 呼叫中。這讓您可以快速執行遠端命令,例如franklin uptime