如何使 OSX 終端選項卡名稱與 .ssh/config 主機別名相同

如何使 OSX 終端選項卡名稱與 .ssh/config 主機別名相同

設定 .ssh/config 可以節省大量時間。具有使用者定義名稱的主機別名可以更輕鬆地追蹤伺服器和金鑰檔案。但是,OSX 終端機選項卡名稱顯示的是伺服器所說的主機名,而不是 .ssh/config 檔案中的主機別名。

對於此條目:

Host CustName01
    HostName ec2-20-12-130-143.compute-1.amazonaws.com
    IdentityFile ~/.ssh/remote.pem
    User root

OSX 終端機選項卡名稱顯示如下:

root@domU-11-21-35-24-33-9A:~

我嘗試透過在連接之前設定選項卡名稱來解決問題:

Host *
    PermitLocalCommand yes

Host CustName01
    LocalCommand printf "\e]1;CustName01\a"
    HostName ec2-20-12-130-143.compute-1.amazonaws.com
    IdentityFile ~/.ssh/remote.pem
    User root

它在連接之前設定選項卡名稱,但在連接後再次顯示:

root@domU-11-21-35-24-33-9A:~

如何讓我的選項卡自動顯示我在 ssh 設定檔中指定的 CustName01 別名?在檢查選項卡對話框中手動設定值不是我想要的。

連接到遠端伺服器時執行設定選項卡名稱的命令不會執行任何操作:

printf "\e]1;CustName01\a"

答案1

有點像駭客,但這種方法有效。我說有點有效,因為如果您查看選項卡檢查器,有兩個地方可以設定選項卡的標題。我無法使用 applescript 設定我想要的「選項卡標題」輸入,但我能夠設定「視窗標題」輸入。這個解決方案將幫助我知道我連接到哪台機器。

settabname.sh

#!/bin/bash

osascript -e 'delay 2' -e "tell application \"Terminal\" to tell window 1 to set custom title to \"$1\""

〜/ .ssh /配置

Host *
    PermitLocalCommand yes

Host CustName01
    LocalCommand ~/.ssh/settabname.sh CustName01 &
    HostName ec2-20-12-130-143.compute-1.amazonaws.com
    IdentityFile ~/.ssh/remote.pem
    User root

這裡的技巧是 & 使帶有嵌入的 applescript 的 bash 非同步執行。 applescript 有一個延遲,允許它在遠端連線重新命名後重新命名標籤。

以下是 ssh 指令退出後清理選項卡名稱的方法。 https://unix.stackexchange.com/questions/40899/ssh-localcommand-on-exit

~/.bashrc

## run a cleanup command after ssh exit
ssh() {
    if command ssh "$@"; then
        # commands go here
        ~/.ssh/settabname.sh Local &
    fi
}

相關內容