Верх страницы
Обложка к записи Как использовать файл конфигурации SSH
Время для прочтения: 1 мин. 17 сек.

Как использовать файл конфигурации SSH

Если вы регулярно подключаетесь к нескольким удаленным системам по SSH, запомнить все эти IP-адреса, различные имена пользователей, нестандартные порты и другие параметры командной строки будет крайне сложно, а то и вообще невозможно.

Одним из вариантов может быть создание алиасов (псевдонимов) bash для каждого подключения к удаленному серверу. Однако есть и другое, гораздо лучшее и более простое решение этой проблемы. OpenSSH позволяет создать файл конфигурации для каждого пользователя, в котором можно хранить различные параметры SSH для каждой удаленной машины, к которой вы подключаетесь.

В этой статье я рассмотрю основы конфигурационного файла SSH-клиента и объясню некоторые наиболее распространенные параметры конфигурации.

Необходимые условия

Мы предполагаем, что вы используете систему Linux или macOS с установленным клиентом OpenSSH.

Расположение файла конфигурации SSH

Файл конфигурации клиентской части OpenSSH называется config и хранится в каталоге .ssh в домашней директории пользователя.

Каталог ~/.ssh создается автоматически при первом выполнении пользователем команды ssh. Если в вашей системе этот каталог не существует, создайте его с помощью следующей команды:

mkdir -p ~/.ssh && chmod 700 ~/.ssh

По умолчанию файл конфигурации SSH может не существовать, поэтому вам может потребоваться создать его с помощью команды touch :

touch ~/.ssh/config

Этот файл должен быть доступен для чтения и записи только пользователю и недоступен другим:

chmod 600 ~/.ssh/config

Структура файла конфигурации SSH и шаблоны

Конфигурационный файл SSH имеет следующую структуру:

Host hostname1
    SSH_OPTION value
    SSH_OPTION value

Host hostname2
    SSH_OPTION value

Host *
    SSH_OPTION value

Содержимое файла конфигурации SSH-клиента организовано в виде секций. Каждая строфа начинается с директивы Host и содержит определенные опции SSH, используемые при установлении соединения с удаленным SSH-сервером.

Строфа (секция) в файле конфигурации SSH — это раздел, который начинается с директивы Host и содержит определенные параметры SSH, используемые при установлении соединения с удаленным SSH-сервером.

Отступы не обязательны, но рекомендуются, так как облегчают чтение файла.

Директива Host может содержать один шаблон или список шаблонов, разделенных пробелами. Каждый шаблон может содержать ноль или более символов, не разделенных пробелами, или один из следующих спецификаторов шаблона:

  • * — Сопоставляет ноль или более символов. Например, Host * соответствует всем хостам, а 192.168.0.* соответствует хостам в подсети 192.168.0.0/24.
  • ? — Сопоставляет ровно один символ. Шаблон Host 10.10.0.? соответствует всем хостам в диапазоне 10.10.0.[0-9].
  • ! — Если он используется в начале шаблона, то отрицает совпадение. Например, Host 10.10.0.* !10.10.0.5 соответствует любому хосту в подсети 10.10.0.0/24, кроме 10.10.0.5.

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

Полный список доступных опций ssh можно найти, набрав в терминале:

man ssh_config

или посетив страницу помощи ssh_config .

Файл конфигурации SSH также читается другими программами, такими как scp, sftp и rsync.

Пример файла конфигурации SSH

Теперь, когда мы рассмотрели основы конфигурационного файла SSH, давайте посмотрим следующий пример.

Обычно при подключении к удаленному серверу по SSH вы указываете имя удаленного пользователя, имя хоста и порт. Например, чтобы войти в систему от имени пользователя mikhail на хост kobzarev.com с портом 2322 в командной строке нужно набрать:

ssh mikhail@kobzarev.com -p 2322

Чтобы подключиться к серверу, используя те же опции, что и в команде выше, просто набрав ssh mihdan, добавьте следующие строки в ваш файл ~/.ssh/config:

Host mihdan
    HostName kobzarev.com
    User mikhail
    Port 2322

Теперь при вводе ssh mihdan SSH-клиент будет читать файл конфигурации и использовать данные подключения, указанные для хоста mihdan:

ssh mihdan

Пример общего файла конфигурации SSH

Этот пример даёт более подробную информацию о шаблонах хоста и приоритете опций.

Возьм`м следующий пример файла:

Host targaryen
    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key

Host tyrell
    HostName 192.168.10.20

Host martell
    HostName 192.168.10.50

Host *ell
    user oberyn

Host * !martell
    LogLevel INFO

Host *
    User root
    Compression yes
  • Когда вы набираете ssh targaryen, SSH-клиент считывает файл и применяет опции из первого совпадения, которым является Host targaryen. Затем он поочередно проверяет следующие строфы на наличие совпадающего шаблона. Следующее совпадение — Host * !martell (означает все хосты, кроме martell), и он применит опцию подключения из этой строфы. Последнее определение Host * также совпадает, но SSH-клиент будет использовать только опцию Compression, поскольку опция User уже определена в строфе Host targaryen. Полный список опций, используемых при вводе ssh targaryen, выглядит следующим образом:
    HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
  • При запуске ssh tyrell совпадающими шаблонами хостов являются: Host tyrell, Host *ell, Host * !martell и Host *. В этом случае используются следующие опции:
    HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
  • Если запустить ssh martell, то совпадающими шаблонами хостов будут: Host martell, Host *ell и Host *. В этом случае используются следующие параметры:
    HostName 192.168.10.50 User oberyn Compression yes
  • Для всех остальных соединений SSH-клиент будет использовать опции, указанные в разделах Host * !martell и Host *.

Перезапись опции файла конфигурации SSH

SSH-клиент считывает свою конфигурацию в следующем порядке по старшинству:

  • Параметры, заданные из командной строки.
  • Параметры, определенные в файле ~/.ssh/config.
  • Параметры, определенные в файле /etc/ssh/ssh_config.

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

Например, если у вас есть следующее определение:

Host dev
    HostName dev.example.com
    User john
    Port 2322

и вы хотите использовать все остальные опции, но подключиться от имени пользователя root, а не john, просто укажите пользователя в командной строке:

ssh -o "User=root" dev

Флаг -F (configfile) позволяет указать альтернативный конфигурационный файл для каждого пользователя.

Чтобы указать SSH-клиенту игнорировать все параметры, указанные в конфигурационном файле ssh, используйте следующий синтаксис:

ssh -F /dev/null user@example.com

Полезные опции конфигурации SSH

Ниже предлагаю некоторые полезные опции конфигурации SSH, которые можно настроить в файле конфигурации ~/.ssh/config:

ОпцияЗначениеОписание
TCPKeepAlivenoОпция для поддержания соединения, предотвращая его закрытие из-за неактивности.
AddKeysToAgentyesОпция, которая указывает, следует ли автоматически добавлять ключи в запущенный ssh-agent
ServerAliveInterval20Опция, которая определяет интервал времени в секундах, через который SSH-клиент будет отправлять зашифрованное сообщение на сервер для проверки активности соединения
UseKeychainyesОпция, которая указывает, следует ли системе искать парольные фразы в связке ключей (MacOS, Linux)
IdentitiesOnlyyesОпция, которая указывает SSH-клиенту использовать только указанный ключ для аутентификации и игнорировать другие ключи, предлагаемые ssh-agent или находящиеся в каталоге ~/.ssh

Заключение

Я показал вам, как настроить пользовательский файл конфигурации SSH. Возможно, вы также захотите настроить аутентификацию на основе ключей SSH и подключаться к вашим серверам Linux без ввода пароля.

По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности вашему серверу, снижая риск автоматических атак.

Если у вас возникли вопросы, пожалуйста, оставьте комментарий ниже.

Ссылки

Комментарии
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Symfony, Laravel, Moonshine, фильмы и сериалы