
Настройка .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:~
Как мне заставить мою вкладку автоматически отображать псевдоним CustName01, указанный мной в файле конфигурации ssh? Ручная установка значения в диалоговом окне проверки вкладки — это не то, что мне нужно.
Выполнение команды для установки имени вкладки при подключении к удаленному серверу ничего не дает:
printf "\e]1;CustName01\a"
решение1
Это своего рода хак, но это вроде работает. Я говорю вроде работает, потому что есть два места для установки заголовка вкладки, если вы посмотрите в Tab Inspector. Я не смог установить нужный мне ввод, который говорит "Tab Title" с помощью AppleScript, но я смог установить тот, который говорит "Window Title". Это решение поможет мне узнать, к какой машине я подключен.
settabname.sh
#!/bin/bash
osascript -e 'delay 2' -e "tell application \"Terminal\" to tell window 1 to set custom title to \"$1\""
~/.ssh/config
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
Хитрость здесь в том, что & заставляет bash со встроенным applescript выполняться асинхронно. У 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
}