Ssh

SSH 到兩個地址,使用第一個連接的地址

  • December 19, 2012

我有一台家用電腦(我們稱它為franklin,因為我就是這麼稱呼它的),我經常從我的工作筆記型電腦 ssh 進入。當我在家時,我 ssh 到 franklin.local,當我在工作或其他任何地方時,我 ssh 到 remote.address.of.franklin。

我想在我的個人資料中有一個功能,該功能始終以正確的方式連接到這種情況。我的網路狀況經常發生變化(有線與無線、不同的 SSID 等),所以我不希望通過檢測網路狀態來做到這一點,而是:

  1. 如果 franklin 在本地可用,請在本地連接,
  2. 否則,遠端連接

這是我現在使用的:

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

引用自:https://unix.stackexchange.com/questions/58898