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