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

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

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

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

Подготовка

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

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

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

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

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

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

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 [email protected] -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 читает свою конфигурацию в следующем порядке приоритета:

  1. Параметры, указанные в командной строке.
  2. Параметры, определенные в ~/.ssh/config .
  3. Параметры, определенные в /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 [email protected]

Выводы

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

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

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

Оставьте комментарий