metalnikovg.ru
MetalnikovG.ru

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

Опубликовано
Опубликовано
//
4 мин. чтения

Введение

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

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

Файл конфигурации клиентской части OpenSSH называется config и хранится в каталоге .ssh в домашнем каталоге пользователя. Каталог ~/.ssh создается автоматически, когда пользователь запускает команду 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.78.* соответствует хостам в подсети 192.168.78.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 вы указываете имя удаленного пользователя, имя хоста и порт. Например, чтобы войти на сервер 192.168.78.10 как пользователь root через порт 2222 из командной строки, вы должны ввести:

ssh root@192.168.78.10 -p 2222

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

Host test-srv
    HostName 192.168.78.10
    User root
    Port 2222

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

ssh test-srv

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

В этом примере представлена ​​более подробная информация о шаблонах хоста и приоритетах опций.

Давайте возьмем следующий пример файла:

Host test-srv
    HostName 192.168.78.10
    User admin
    Port 2222
    IdentityFile ~/.ssh/ed_25519

Host 1-server
    HostName 192.168.78.20

Host 2-server
    HostName 192.168.78.30

Host *server
    user ivan

Host * !2-server
    LogLevel INFO

Host *
    User root
    Compression yes

Когда вы вводите ssh test-srv, клиент ssh считывает файл и применяет параметры из первого совпадения, то есть Host test-srv. Затем он проверяет следующие строфы одну за другой на соответствие шаблону. Следующее соответствие — Host * !2-server (то есть все хосты, кроме 2-server), и он применит параметр подключения из этой строфы. Последнее определение Host * также совпадает, но клиент ssh возьмет только Compression параметр, поскольку Userпараметр уже определен в строфе Host test-srv.

Полный список параметров, используемых при вводе текста, ssh test-srv выглядит следующим образом:

HostName 192.168.78.10
User admin
Port 2222
IdentityFile ~/.ssh/ed_25519
LogLevel INFO
Compression yes

При запуске ssh 1-server используются шаблоны хоста: Host 1-serverHost *serverHost * !2-server и Host *. Параметры, используемые в этом случае:

HostName 192.168.78.20
User ivan
LogLevel INFO
Compression yes

Если вы запустите ssh 2-server, используются шаблоны хоста: Host 2-serverHost *server и Host *. Параметры, используемые в этом случае:

HostName 192.168.78.30
User ivan
Compression yes

Для всех остальных подключений клиент ssh будет использовать параметры, указанные в разделах Host * !2-server и Host *.

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

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

  1. Параметры, указанные в командной строке.
  2. Параметры, определенные в ~/.ssh/config.
  3. Параметры, определенные в /etc/ssh/ssh_config.

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

Host test-srv
    HostName 192.168.78.10
    User root
    Port 2222

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

ssh -o "User=admin" test-srv

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

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

ssh -F /dev/null user@192.168.78.10