Хоча я успішно зібрав 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 |
і все працює.
Посилання
- man ssh_config – усе що можна описувати у ~/.ssh/config
- Стаття на habrahabr.ru
- автодоповнення хостів на базі історії ssh-з’єднань (англ.)