УВІЙТИ
    opened image

    Для того, щоб зробити процес введення команд, що дозволяють підключитися до серверів, більш швидким і зручним способом, існує корисна функція автоматичного доповнення 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 [email protected]

    Достатньо буде написати:

    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 в актуальному стані і постійно оновлювати. Це надасть вам можливість безпроблемного і простого управління великими серверними інфраструктурами, для чого не потрібно запам'ятовувати складні команди для підключення.