
Если вы регулярно подключаетесь к нескольким удаленным системам через 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-сервером.
Отступы не обязательны, но рекомендуются, поскольку они облегчают чтение файла.
Директива 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 необходимо указать имя удалённого пользователя, имя хоста и порт. Например, чтобы войти под именем john на хост dev.example.com через порт 2322 из командной строки, введите:
ssh john@dev.example.com -p 2322
Чтобы подключиться к серверу, используя те же параметры, что указаны в команде выше, просто введите ssh dev и добавьте следующие строки в файл "~/.ssh/config :
~/.ssh/config
Host dev HostName dev.example.com User john Port 2322
Теперь при вводе ssh dev клиент ssh прочитает файл конфигурации и будет использовать данные подключения, указанные для хоста dev :
ssh dev
Пример файла конфигурации общего 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 и подключаться к своим серверам Linux без ввода пароля.
По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности вашему серверу, снижая риск автоматизированных атак.
Если у вас есть вопросы, пожалуйста, оставьте комментарий ниже.
Связанные руководства