opened image

Конфигурация автоматического дополнения SSH-команд из файла .ssh/config

Для того, чтобы сделать процесс ввода команд, позволяющих подключиться к серверам более быстрым и удобным способом, существует полезная функция автоматического дополнения 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 в актуальном состоянии и постоянно обновлять. Это предоставим вам возможность беспроблемного и простого управления большими серверными инфраструктурами, для чего не потребуется запоминать сложные команды для подключения.