В прошлом посте мы разобрали базовое использование команды ssh и полезные опции. Но каждый раз вручную вводить сложный IP-адрес, имя пользователя, номер порта и прочие детали — занятие ещё то: неудобно и быстро начинает раздражать. В таких случаях выручает SSH config-файл. Он позволяет сохранить настройки подключения к часто используемым серверам — почти как «избранное» — и подключаться к ним по короткому псевдониму (alias).

Кстати, я сам, когда был «совсем новичком» и даже не подозревал о существовании config-файла, думал: «Да как вообще каждый раз набирать эту длиннющую и сложную команду для SSH-подключения?» В итоге я просто брал строку команды, как есть, и регистрировал её как alias в файле .bashrc. А когда позже узнал, как правильно оформлять config, понял, насколько по-деревенски и безграмотно я тогда выкручивался.

Я, восхищённый тем, что наконец узнал про SSH config


Что такое SSH config-файл?

SSH config-файл — это конфигурационный файл, с помощью которого можно настраивать поведение SSH-клиента. Если заранее сохранить в нём параметры подключения к конкретному хосту (пользователь, порт, ключ и т. д.), то позже можно подключаться, вводя всего лишь короткий псевдоним.

  • Расположение: обычно он находится в папке .ssh в домашнем каталоге пользователя и называется config. Если вы только что установили SSH, его, скорее всего, ещё нет — тогда файл нужно создать.
  • Создание файла: если ~/.ssh/config отсутствует, создайте его вручную. Права доступа обязательно должны быть 600.
touch ~/.ssh/config
chmod 600 ~/.ssh/config  # Настройка прав обязательна для безопасности!

Правила написания config-файла

Config-файл — это простой текстовый файл. Настройки для каждого хоста оформляются блоком, который начинается с ключевого слова Host.

Базовая структура

Host [псевдоним]
    [опция1] [значение1]
    [опция2] [значение2]
    ...
  • Host [псевдоним]: обозначает начало блока и задаёт псевдоним (alias), который вы будете использовать в команде ssh. Вместо псевдонима можно указать реальный адрес хоста (IP или домен). Также поддерживаются маски (*, ?).
  • Отступы: опции внутри блока должны быть с отступом. Можно использовать пробелы или табы — главное, придерживаться одного стиля.
  • Опции: ниже Host перечисляются параметры SSH, которые применяются при подключении по этому псевдониму. По сути это то же самое, что вы раньше передавали через ssh -опция.

Часто используемые опции

Опция Описание Пример значения
HostName Реальный IP-адрес или доменное имя сервера 192.168.1.100 или example.com
User Имя пользователя для подключения ubuntu, ec2-user, root
Port SSH-порт сервера (по умолчанию 22) 2222
IdentityFile Путь к приватному ключу ~/.ssh/id_ed25519_myserver
ForwardAgent Включить проброс SSH-агента (при ssh-agent) yes
StrictHostKeyChecking Насколько строго проверять host key (yes рекомендуется) no (временно для первых тестов)
PortForwarding Разрешить порт-форвардинг yes
LocalForward Локальный порт-форвардинг (аналог -L) 8080 localhost:80
ServerAliveInterval Интервал (сек.) для проверки, что соединение живо 60 (чтобы не отваливалось)
ServerAliveCountMax Сколько раз повторять проверку перед разрывом 3

Пример SSH config-файла

Добавим настройки для нескольких серверов, к которым вы подключаетесь чаще всего, в ~/.ssh/config.

# Первый сервер: веб-сервер (псевдоним: webserver)
Host webserver
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_webserver # Отдельный ключ для веб-сервера

# Второй сервер: dev-сервер (псевдоним: devbox)
Host devbox
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_rsa_dev # Используем RSA-ключ
    # При подключении к этому серверу пробрасываем локальный 8000 порт на удалённый 80 порт
    LocalForward 8000 localhost:80 

# Третий пример: все AWS EC2 серверы (шаблон псевдонимов: aws-*)
Host aws-*
    User ec2-user
    IdentityFile ~/.ssh/aws_ec2_key.pem
    # Периодически шлём keep-alive, чтобы соединение не разрывалось
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Общие настройки для определённого диапазона IP (шаблон: 10.0.0.*)
Host 10.0.0.*
    User admin
    Port 22

Пояснения:

  • webserver: подключение к 192.168.1.100 как ubuntu через порт 2222 с ключом id_ed25519_webserver.
  • devbox: подключение к dev.example.com как developer с ключом id_rsa_dev и пробросом локального порта 8000 на удалённый порт 80.
  • aws-*: настройки, которые применяются ко всем псевдонимам, начинающимся с aws-. Например, при aws-prod или aws-dev автоматически применятся User и IdentityFile. HostName в таком случае интерпретируется как prod при подключении через aws-prod (и затем используется в ssh aws-prod).
  • 10.0.0.*: при подключении к IP-адресам вида 10.0.0.x автоматически применяется пользователь admin и стандартный порт 22.

Честно говоря, я показал вариант с wildcard * просто для знакомства, но в реальной жизни почти так не делаю. Обычно проще и понятнее поддерживать конфиг, когда один сервер = один блок настроек (1:1).
И ещё: иногда к одному и тому же серверу нужно подключаться с разными настройками. Тогда я добавляю несколько вариантов и выбираю псевдоним как блюдо в меню ресторана — набрал ssh my-alias и «заказал» нужный способ подключения.


Магическая картинка: нажимаешь кнопку SSH-подключения — и сеть разливается во все стороны

Как пользоваться config-файлом

После того как настройки сохранены в config-файле, подключаться становится гораздо проще. Давайте попробуем на основе примеров выше.

1. Подключение по псевдониму

Выполняем SSH-команду, используя только псевдоним.

  • Псевдоним webserver:
ssh webserver
Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver':
ubuntu@webserver-ip:~ $

Эта команда внутри эквивалентна: ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100

  • Псевдоним devbox:
ssh devbox
Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev':
developer@devbox-domain:~ $

(При этом локальный порт 8000 будет проброшен на порт 80 на dev.example.com.)


Преимущества использования config-файла

  • Удобство: длинные и сложные SSH-команды заменяются короткими псевдонимами — меньше ошибок и меньше печати.
  • Продуктивность: можно быстро переключаться между серверами и работать эффективнее.
  • Простота управления: все настройки подключения лежат в одном месте, поэтому сопровождать их легче. Например, если у сервера поменялся IP — достаточно поправить только config.
  • Безопасность: важные детали (например путь к ключу) не остаются в истории команд.

В заключение

SSH config-файл — обязательный инструмент для всех, кто регулярно пользуется SSH: и для разработчиков, и для системных администраторов. С ним подключение становится заметно удобнее и быстрее. Откройте ~/.ssh/config и создайте свои собственные псевдонимы!

Почитайте и другие посты про SSH: в правом поле поиска просто введите ssh, и вы найдёте больше материалов по теме.

Если остались вопросы — смело задавайте их в комментариях!