~/.ssh/config TAB autocomplite

Хоча я успішно зібрав PAC Manager і він навіть працює, складно вважати це гарним рішенням. Тим більше, перед цим мені довелося викручуватись, і зараз я бачу все я робив вірно. А що саме я робив не соромно і описати детальніше

~/.ssh/config

Це користувацький файл налаштувань ssh-клієнта. Якщо ви вважаєте що замісь ssh -C root@192.168.192.1 краще писати щось на зразок ssh gw, то читайте далі. Цей файл нам якраз допоможе.
Ось гіпотетичний зразок ~/.ssh/config

Host *
User yudjin
Compression yes
ServerAliveInterval 120
 
Host gw
        Hostname 192.168.192.1
        User root
        Compression no
 
Host nas
        Hostname 192.168.192.20
 
Host graphit
        Hostname 192.168.192.21
 
Host sulacko
        Hostname 192.168.192.22

Тут є кілька блоків Host. Перший має назву *, тому описані у ньому налаштування будуть застосовані до ssh при підключенні до усіх хостів, які не описані у ~/.ssh/config. Так, команда ssh -C yudjin@yudjin.name буде еквівалентною ssh yudjin.name. Користувач та компресія диктуються ~/.ssh/config, а саме першим блоком Host *.
ServerAliveInterval 120 говорить про те, що не хочу щоб сесії відвалювалися коли я піду пити чай.
Кожен наступний блок створює псевдонім підключення. До псевдоніму підв’язується справжнє ім’я хосту і комплект специфічних налаштувань. На приклад щоб зайти на 192.168.192.20 достатньо написати ssh nas. Тут має виникнути питання навіщо я задав такі довгі аліаси у наступних двох блоках, адже можна було написати щось на зразок ‘Host gr’ і ‘Host su’. На справді, як я вже казав, ssh сесій можуть бути сотні, а тоді короткі аліаси викликають плутанину, крім того можна не вводити їх повністю. Чому? – autocomplete!

TAB autocomplete

Задача добивати табом аліаси, якщо вони вводяться після команди ssh. Аліаси брати з ~/.ssh/config. Готового рішення я не знайшов, знайшов інші. А ось моє:

complete -W "$(echo `cat ~/.ssh/config | grep 'Host ' | cut -f2 | uniq | grep -v "\["`;)" ssh scp

Цей скрипт вставляємо у ~/.bashrc

source ~/.bashrc

і все працює.

Посилання

~/.ssh/config TAB autocomplite