如何使 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

有点像 hack,但这种方法还是可行的。我说这种方法可行是因为如果你查看选项卡检查器,有两个地方可以设置选项卡的标题。我无法使用 applescript 设置我想要的“选项卡标题”输入,但我可以设置“窗口标题”输入。不过,这个解决方案可以帮助我知道我连接到哪台机器。

设置表名称

#!/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
}

相关内容