Введение
Если вы регулярно подключаетесь к нескольким удаленным хостам через 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-server
, Host *server
, Host * !2-server
и Host *
. Параметры, используемые в этом случае:
HostName 192.168.78.20
User ivan
LogLevel INFO
Compression yes
Если вы запустите ssh 2-server
, используются шаблоны хоста: Host 2-server
, Host *server
и Host *
. Параметры, используемые в этом случае:
HostName 192.168.78.30
User ivan
Compression yes
Для всех остальных подключений клиент ssh будет использовать параметры, указанные в разделах Host * !2-server
и Host *
.
Переопределить параметр файла конфигурации SSH
Клиент ssh считывает свою конфигурацию в следующем порядке приоритета:
- Параметры, указанные в командной строке.
- Параметры, определенные в
~/.ssh/config
. - Параметры, определенные в
/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