В предыдущем посте мы рассмотрели основные команды ssh и полезные опции. Однако постоянно вводить сложные IP-адреса, имена пользователей, номера портов и т. д. – это довольно неудобно. В таких случаях использование SSH Config файла может решить все эти неудобства за один раз. Это как закладка, которая сохраняет информацию о часто используемых серверах, позволяя легко подключаться с помощью псевдонима (Alias).

Разработчик, использующий SSH config как закладку


Что такое SSH Config файл?

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

  • Расположение: Обычно этот файл существует в папке .ssh вашего домашнего каталога с именем config.
    • Пример: ~/.ssh/config
  • Создание файла: Если файл ~/.ssh/config отсутствует, вам нужно его создать.

    bash touch ~/.ssh/config chmod 600 ~/.ssh/config # чтобы обеспечить безопасность, права чтения/записи разрешены только владельцу


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

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

Основная структура

Host [псевдоним]
    [опция1] [значение1]
    [опция2] [значение2]
    ...
  • Host [псевдоним]: Указывает на начало блока и определяет ваш псевдоним (Alias), который вы будете использовать в командной строке SSH. Вместо псевдонима можно вставить непосредственно фактический адрес хоста (IP или домен). Вы также можете использовать символы подстановки (*, ?).

  • Отступы: Опции под Host должны быть отформатированы с отступами. Вы можете использовать пробелы или табуляцию, но лучше поддерживать согласованность.

  • Опции: Под 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-агента (Agent Forwarding, при использовании ssh-agent) yes
StrictHostKeyChecking Жесткая проверка ключа хоста (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 # Использовать ключ, предназначенный для веб сервера

# Второй сервер: сервер разработки (псевдоним: 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
    # Присылает сигналы регулярно, чтобы поддерживать соединение
    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.*: Автоматически применяет пользователя admin и стандартный порт 22 при подключении к IP-адресам в формате 10.0.0.x.


Нажав кнопку 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)
  • Использование aws-prod (псевдоним с подстановкой):
    ssh aws-prod
    Enter passphrase for key '/home/youruser/.ssh/aws_ec2_key.pem':
    ec2-user@aws-prod-hostname:~ $

Внимание: Для псевдонимов с подстановкой, таких как aws-prod, для которых имя хоста не указано отдельно, вам может потребоваться явно задать опцию HostName или указать имя хоста в командной строке. В примере aws-* выше HostName не указан, поэтому когда вы выполняете ssh aws-prod, SSH-клиент попытается интерпретировать prod как имя хоста. Для большей ясности рекомендуется сопоставить Host prod-server и HostName prod.example.com.


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

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

В заключение

SSH Config файл является обязательным инструментом для всех разработчиков и системных администраторов, использующих SSH. Используя этот файл, вы можете сделать ваш опыт подключения SSH значительно более удобным и эффективным. Откройте файл ~/.ssh/config и создайте свои собственные псевдонимы!

Также ознакомьтесь с другими постами о SSH! Используя правую поисковую строку, вы можете найти множество статей, связанных с ssh.

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