Из-за особенностей профессии число удалённых серверов, на которые мне нужно подключаться по SSH, исчисляется несколькими десятками. Управление таким количеством хостов привычными способами (где-то хранить адрес сервера, пользователя, пароль для него и пр.) в один момент становится неудобным поэтому возникает желание внести эти данные один раз и потом только подключаться к нужной машине. Давние подписчики и читатели канала знают, что на протяжении долгого времени я использую эмулятор терминала Tabby, про который неоднократно писал ранее.
Однако, дистрибутивы Linux имеют способы управления SSH-соединениями, которые идут прям из коробки. Чтобы их использовать не нужны дополнительные программы, эмуляторы и прочие приблуды: хватит одного текстового редактора (графического или консольного). Об этом способе сегодня и хочу вам рассказать.
Чтобы не пропустить новые заметки нужно подписаться на канал. Также, вы можете получать уведомления о выходе материалов самыми первыми: для этого подпишитесь на Дзен-ридер.
📃 Создаём файл конфигурации для SSH-клиента
Для управления SSH-соединениями достаточно создать файл config - он является настроечным файлом для клиента SSH. В нём вы сможете настроить параметры соединений, чтобы не было необходимости каждый раз указывать опции для каждого конкретного сервера. Стандартным место хранения этого файла является папка .ssh, расположенная в домашней директории вашего пользователя (там же, где по-умолчанию хранятся публичный и приватный SSH-ключи). Изначально такого файла не существует, поэтому его нужно создать:
nano ~/.ssh/config
Разумеется, вместо nano вы можете выбрать любой другой текстовый редактор, как консольный, так и графический. Теперь, давайте взглянем на тот синтаксис файла config, который использую у себя.
Думаю, что какие-либо дополнительные пояснения здесь не нужны. Скажу лишь, что:
- путь до приватного ключа можете не указывать, если SSH-подключение происходит по паролю (что, конечно же, не является безопасным, потому от такого лучше избавляться и переходить на ключи).
- можете не указывать порт для соединения, если он не отличается от стандартного порта 22.
Перечисленные параметры не единственные, через config можно настроить уровень логирования для конкретного соединения, настроить параметры авторизации и многое другое. Давайте заполним шаблон понятными примерами и посмотрим на скриншот, представленный ниже.
Мы настроили подключение к узлу с именем host_1 под пользователем user_1 с использование SSH-ключа. После того, как вы внесли нужные данные, достаточно сохранить файл config и в терминале использовать простую команду для соединения:
ssh host_1
SSH-клиент считает данные из файла config и, если его всё устроит, то произойдёт подключение к удалённому серверу.
⬆️ Настройка jump-хоста посредством файла config
Про SSH jump-host я рассказывал в заметке про то, как их настраивать в эмуляторе терминала Tabby. Ссылку на статью оставлю ниже.
Суть не изменилась, просто теперь мы будем настраивать джамп-хост при помощи файла config. Наверняка, вы понимаете, что для реализации такого подхода нам нужны два SSH-узла.
В этом примере учтены все моменты, про которые говорили в первом пункте:
- если порт стандартный, то его не указываем
- файл приватного ключа указан в обоих случаях, так как аутентификацию посредством пароля мы для безопасности не используем.
Теперь введём в терминале команду:
ssh host2
SSH-клиент перечитает файл config и поймёт, что для подключения к host_2 нужно использовать промежуточный сервер host_1, данные по которому указаны выше.
💻 Файл config прекрасно дружит с эмулятором Tabby
Если вы решили, также как и я, начать использовать Tabby, то можно не беспокоиться на счёт совместимости этой программы с файлом config. Tabby прекрасно подтягивает данные оттуда, что убирает необходимость управлять подключениями при помощи функционала самого эмулятора.
На прикрепленном скриншоте можно наблюдать пример того, как Tabby определил файл config и при попытке найти какой-либо сервер для соединения, предлагает, в том числе, и записи из config.
📎 Маленькая хитрость, которая упрощает обновление файла config
Вы можете иметь сохраненный экземпляр файла config, например, в облачном хранилище, а в папку .ssh в домашней директории пользователя сделать симлинк на этот файл:
ln -s <место_хранения_оригинала> /home/<имя_пользователя>/.ssh/
В моём случае используется облачное хранилище Яндекс Облако, где лежит оригинальный файл config и при каждой настройке нового дистрибутива я просто делаю симлинк. После можно вносить любые изменения в оригинал, они автоматически сохранятся в облаке и отразятся в SSH-клиенте дистрибутива.
Если вы не знаете, что такое символические ссылки в Linux, то прочитайте мою статью про них, а также жёсткие ссылки.
🏁 Вместо заключения
При помощи файла config можно гибко настраивать КАЖДОЕ соединение по SSH, которое вам необходимо осуществлять. При этом, никаких дополнительных утилит устанавливать не нужно, всё управление осуществляется из коробки. Так что, если вам необходимо контролировать большое число SSH-хостов, то смело можете пользоваться описанным в статье методом.
Думаю, что статья достойна, как минимум лайка и комментария, как максимум - того, чтобы поделиться ей за пределами Дзена. Если вы желаете познакомиться с ещё большим числом полезных материалов по Linux, то загляните в те два раздела на канале, на которые ниже оставлю ссылки.