之前會使用 Royle TSX 或者 ServerCat 來 SSH 連到伺服器上面管理
不過後來感覺這些軟體都有點重,但其實是我用不到這麼多功能就是了 😭
所以就改回 iTerm 這種獨立輕巧的 app 上面來用了,最近還看到有人推薦使用 GPU 加速的 WezTerm 又更讚啦!
不過用回這些終端 app 就少了一些我經常會用到的功能,其中一個就是快速打開某群組的多台伺服器
像是我會依照不同的客戶機器來做群組分類,A 客戶的群組裡面有三台伺服器,B 客戶的群組裡面有五台伺服器之類的
以前點兩下就能快速打開多個 tab 分別用不同 session 連上,就可以馬上在不同 tab 切換下開始工作
現在用 WezTerm 就算配好 SSH Config,也要一台一台自己手動連,原本想這樣將就將就就算了,但我就懶…
所以還是爬爬網路其他人作法,發現可以寫個簡單的 AppleScript 的指令來快速完成此功能 😬
首先伺服器多的話都會寫個 SSH Config 來管理,先不分類把每一台伺服器都寫進去再說
關於 SSH Config 的更多說明可以參考: https://chusiang.gitbooks.io/working-on-gnu-linux/content/20.ssh_config.html
我們下面弄個簡單範本,先新建一個檔案 ~/.ssh/config
# A1
Host A1 # 代號
Hostname 23.18.111.19 # IP or Domain name
Port 22 # 指定埠口
User loltt # 使用者名稱
identityfile ~/.ssh/id_rsa_a # 指定金鑰
# A2
Host A2 # 代號
Hostname 19.18.11.35 # IP or Domain name
Port 9553 # 指定埠口
User loltt # 使用者名稱
identityfile ~/.ssh/id_rsa_a # 指定金鑰
# A3
Host A3 # 代號
Hostname 39.38.51.51 # IP or Domain name
Port 8569 # 指定埠口
User loltt # 使用者名稱
identityfile ~/.ssh/id_rsa_a # 指定金鑰
# B1
Host B1 # 代號
Hostname 1.8.11.25 # IP or Domain name
Port 22 # 指定埠口
User cat33 # 使用者名稱
identityfile ~/.ssh/id_rsa_b # 指定金鑰
# B2
Host B2 # 代號
Hostname 10.83.21.95 # IP or Domain name
Port 22 # 指定埠口
User cat33 # 使用者名稱
identityfile ~/.ssh/id_rsa_b # 指定金鑰
接著我們根據自己需求,這邊分類成兩組 A1、A2 跟 A3 一組,B1 跟 B2 一組
把 A 組的代號寫到 ~/.ssh/groupa,把 B 組代號寫到 ~/.ssh/groupb,如下所示,一行一個代號
以下為 groupa 的內容
A1
A2
A3
以下為 groupb 的內容
B1
B2
上述東西都準備好以後,我們就可以打開 macOS 裡面內建的工序指令編寫程式 app
然後把下面程式貼進去
|
|
上面第 1、2、12 行中的 iTerm 可以改成你使用的 Terminal Emulator 名稱,例如你如果用 WezTerm 就改成 WezTerm
第 5 行的 groupa,就是剛剛新建的兩個群組檔案名稱,先存一個 groupa
然後保存再去新增一個新的工序指令,把第五行的檔案名稱改成 groupb 就可以
這樣操作以後你就會有兩個 .scpt 的檔案(如果你有更多伺服器群組,請自行如法炮製)
這兩個檔案你自己放在你覺得舒服的路徑即可(如 ~/.ssh/)
如上準備工作做完以後,以後在 iTerm 裡面時,只要使用下面指令就可以馬上打開你設定 A 群組裡面的三台伺服器
$ osascript ~/.ssh/groupa.scpt
腳本會先去讀取 groupa 裡面的伺服器別名,然後依序幫你使用 ssh 連線上去
開完一個之後就會按 command + t 幫你新開一個 tab,再繼續幫你 ssh 第二個伺服器上去
直到 groupa 裡面的東西通通打完為止 😬
另外如果你使用比較新版的 macOS 的話,因為腳本有使用模擬鍵盤輸入功能,所以第一次使用此腳本會跳出隱私授權
需要到系統偏好設定裡面的「隱私權與安全性」,找到「輔助使用」將你的 Terminal Emulator 加入允許清單才行
總體來說這方法看上去雖然很笨的土法煉鋼,但起碼也解決一個我就懶的問題 🫣