Для того, щоб зробити процес введення команд, що дозволяють підключитися до серверів, більш швидким і зручним способом, існує корисна функція автоматичного доповнення SSH-команд. Дана функція задіює конфігураційні файли. Найкраще і ефективніше всього скористатися налаштуванням автодоповнення для мережевих вузлів, заданих у .ssh/config, що дозволяє значно спростити підключення до необхідних серверів. У наведеному матеріалі ми вивчимо, як реалізувати це налаштування на операційних системах Linux і macOS.
Файл .ssh/config відіграє важливу роль у структуризації списку хостів і полегшенні доступу до них при управлінні безліччю віддалених серверів. Однак постійний ручний ввід назв серверів кожного разу є нерозумним, тому спростити цей процес можливо за допомогою налаштування автоматичного доповнення.
.ssh/config - що з себе представляє?
Текстовий документ .ssh/config є файлом, який містить налаштування для з'єднань SSH. За допомогою .ssh/config ви отримаєте можливість задіяти ключі, вказати стандартні порти, встановити псевдоніми (аліаси) для серверів і задати інші параметри підключення. Кожен хост у даній конфігурації може мати свій унікальний аліас, що спрощує процес SSH-підключення.
Файл .ssh/config спокійно відкривається улюбленим редактором. Це можуть бути, наприклад, gedit, vim або nano. У разі, якщо документа .ssh/config не існує, під час використання команди він буде автоматично створений.
Як використовувати файл на прикладі згаданих графічних редакторів?
Редактор nano:
nano ~/.ssh/config
Приклад vim:
vim ~/.ssh/config
Приклад gedit (для любителів графічного інтерфейсу):
gedit ~/.ssh/config &
У разі відсутності графічного редактора, установку можна здійснити за допомогою наступної команди:
sudo snap install gedit
Приклад текстового файлу .ssh/config:
nano ~/.ssh/config
Host example-server
HostName 192.168.1.100
User user1
Port 2222
Далі, щоб уникнути подальшого введення вручну повної команди для підключення:
ssh [email protected] -p 2222
Можна використовувати наступний варіант:
ssh example-server
Для чого необхідне автоматичне доповнення?
Маючи кілька практичних переваг, які значно підвищують зручність роботи, функція автоматичного заповнення SSH на Ubuntu зменшує кількість часу на введення команд і покращує взаємодію з віддаленими серверами. Ось головні доводи на користь автозаповнення:
- Спрощення роботи. Автоматичне заповнення надає можливість швидше прописувати необхідні команди, що є особливо важливим елементом при роботі з довгими шляхами або складними командами. У вас відпадає обов'язок постійно прописувати їх вручну.
Подивимося на ситуацію, коли вам необхідно ввести адресу певного хоста. Для того, щоб уникнути набору наступного варіанту:
Достатньо буде написати:
ssh use[TAB]
Після цього ім'я буде автоматично дописано системою до абсолютного значення.
- Зниження помилок. Завдяки автозаповненню зменшується ймовірність друкарських помилок і неправильного вводу непростих і довгих команд, що призводить до менш частих збоїв. Автоматичний ввід пропонує правильні варіанти, звертаючись до раніше налаштованих хостів у .ssh/config
- Оптимізація роботи по SSH. Автоматичне доповнення розпізнає записи з параметрами підключення до різних хостів, у разі, коли ваш файл .ssh.config вже налаштований, після чого запропонує вам ці записи при написанні ssh-команди. Завдяки такій системі автопідбору з'являється можливість швидкого пошуку вже налаштованих серверів і підключення до них.
Як це може бути записано у файлі .ssh/config:
Host myserver
HostName myserver.com
User myusername
Port 2222
В результаті, спираючись на ваші конфігурації, після введення ssh myser[TAB], система буде рекомендувати вам варіанти автоматичного заповнення.
- Легкість роботи з безліччю серверів. При взаємодії одразу з кількома серверами функція автоматичного завершення значно полегшує процес управління. Немає необхідності запам'ятовувати кожну комбінацію для доменів або IP-адреси — можна обійтися конфігурацією документа .ssh/config, і система самостійно запропонує можливі варіанти.
- Економія часу. Під час використання автоматичного доповнення SSH користувачі можуть заощадити час на серверне з'єднання, не вводячи всю команду з нуля, а просто дублюючи вже існуючі команди або шляхи. Функція вкрай корисна для тих, хто постійно звертається до безлічі віддалених серверів. Наприклад, розробників і системних адміністраторів.
- Підвищення продуктивності: Автозаповнення дозволяє зосередитися на більш важливих завданнях, мінімізуючи рутинні дії при роботі зі скриптами і в терміналі. Крім того, автоматичне доповнення можливо застосовувати і в інших випадках, якщо все правильно налаштувати, це може суттєво зменшити обсяг виконуваної роботи і підвищити продуктивність.
Ці переваги роблять автодоповнення незамінним інструментом для експертів і новачків, які працюють з SSH в Ubuntu.
Конфігурація автоматичного доповнення bash-completion для SSH
Перший етап: налаштування
Для налаштування автодоповнення SSH вам знадобиться встановлений пакет bash-completion. Цей пакет зазвичай попередньо встановлений у сучасних дистрибутивах Linux, але якщо його немає, його можна встановити.
Встановлення bash-completion на платформах Ubuntu і Debian:
sudo apt update
sudo apt install bash-completion
Встановлення bash-completion на платформах CentOS і Fedora:
sudo yum install bash-completion
Для Arch Linux: sudo pacman -S bash-completion
Активування:
По завершенню встановлення вам слід перевірити активність автоматичного доповнення за допомогою додавання в файл .bashrc або .bash_profile рядка:
nano ~/.bashrc
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Як тільки перевірите активацію доповнення, виконайте перезапуск термінала або використовуйте наступну команду:
source ~/.bashrc
Другий етап: Налаштування автоматичного доповнення SSH
На другому етапі конфігурування вам необхідно до хостів у документі .ssh/config додати автоматичне доповнення.
Щоб здійснити цю процедуру, використовуйте скрипт доповнення:
В папку /etc/bash_completion.d/ створюємо або вносимо правки в уже існуючий файл автоматичного доповнення. Наступний скрипт допоможе в автоматичному режимі завантажувати з документа .ssh/config необхідні хости.
Створіть файл /etc/bash_completion.d/ssh:
sudo nano /etc/bash_completion.d/ssh
Вставте наступний код в відкритий файл:
_ssh_hosts() {
COMPREPLY=($(compgen -W "$(awk '/^Host / {print $2}' ~/.ssh/config)" -- "${COMP_WORDS[COMP_CWORD]}"))
}
complete -F _ssh_hosts ssh
Цей скрипт витягує імена хостів з файлу .ssh/config і передає їх для автодоповнення.
Збережіть файл і закрийте редактор.
Активуйте зміни:
source /etc/bash_completion.d/ssh
Тепер при введенні команди ssh і початку введення імені хоста система запропонує варіанти автодоповнення.
Перевірка роботи
Щоб перевірити роботу автодоповнення, просто почніть вводити команду SSH і натисніть клавішу Tab. Якщо все налаштовано правильно, система запропонує список доступних хостів з вашого файлу .ssh/config.
Приклад:
ssh exa<Tab>
Результат:
ssh example-server
Підтримка автодоповнення для інших оболонок
Автодоповнення можливе не тільки для Bash. Якщо ви використовуєте інші оболонки, такі як Zsh, автодоповнення також можна налаштувати.
Налаштування автодоповнення для Zsh
Для користувачів Zsh процес налаштування трохи інший. Вам необхідно в файл .zshrc написати наведений нижче рядок, щоб переконатися в активності автоматичного доповнення:
autoload -U compinit && compinit
Наступним кроком створіть режим автоматичного доповнення:
_ssh_hosts_zsh() {
local hosts
hosts=(${(f)"$(awk '/^Host / {print $2}' ~/ ssh/config)"})
_describe -t hosts 'SSH Hosts' hosts
}
compdef _ssh_hosts_zsh ssh
Після проведених маніпуляцій збережіть і перезавантажте свій термінал:
source ~/.zshrc
Успішно завершивши весь процес установки, автоматичне доповнення в Zsh буде приведено в робочий стан.
Взаємодія з кількома конфігураційними файлами
В деяких ситуаціях буває корисно розподіляти налаштування для SSH по кількома файлам. Наприклад, це може бути пов'язано з різними групами серверів. У такому випадку налаштування автодоповнення повинно враховувати всі конфігураційні файли.
Для цього можна додати кілька джерел конфігурації:
_ssh_hosts() {
COMPREPLY=($(compgen -W "$(awk '/^Host / {print $2}' ~/.ssh/config ~/.ssh/config.d/*)" -- "${COMP_WORDS[COMP_CWORD]}"))
}
complete -F _ssh_hosts ssh
Тепер автодоповнення буде працювати для всіх хостів, вказаних у всіх файлах у директорії ~/.ssh/config.d/.
Висновок
Конфігурація автоматичного доповнення SSH-команд для вузлів, вказаних у документі .ssh/config, є ключовим етапом, що дозволяє підвищити ефективність роботи, а також знизити ймовірність помилок при взаємодії з віддаленими серверами. Цим режимом ви спростите собі підключення і отримаєте можливість зосереджуватися на роботі з ключовими завданнями, незалежно від використання Zsh або Bash.
Важливо не забувати тримати текстовий файл .ssh/config в актуальному стані і постійно оновлювати. Це надасть вам можливість безпроблемного і простого управління великими серверними інфраструктурами, для чого не потрібно запам'ятовувати складні команди для підключення.