Если вы регулярно подключаетесь к нескольким удаленным системам по SSH на ежедневной основе, вы обнаружите, что запоминание всех удаленных IP-адресов, различных имен пользователей, нестандартных портов и различных параметров командной строки является трудным, если не невозможным.
Одним из вариантов будет создать псевдоним Bash для каждого соединения с удаленным сервером. Однако есть и другое, гораздо лучшее и более простое решение этой проблемы. OpenSSH позволяет Вам настроить файл конфигурации для каждого пользователя, где вы можете хранить различные варианты SSH для каждой удаленной машины, к которой вы подключаетесь.
Эта статья описывает основы файла конфигурации клиента SSH и объясняет некоторые из наиболее распространенных параметров конфигурации.
Необходимые компоненты
Мы предполагаем, что Вы используете систему Linux или macOS с установленным клиентом OpenSSH.
Расположение файла конфигурации SSH
OpenSSH в клиентский файл конфигурации имеет имя config
и хранится в каталоге .ssh
в разделе Домашний каталог пользователя. Этот каталог ~/.ssh
создается автоматически, когда пользователь запускает SSH команду впервые.
Если вы никогда не использовали ssh команду, то сначала нужно создать каталог, используя:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
По умолчанию конфигурационный файл ssh может не существовать, поэтому вам может понадобиться, чтобы создать его с помощью команды Touch:
touch ~/.ssh/config && chmod 600 ~/.ssh/config
Этот файл должен быть доступен для чтения и записи только пользователю, а не другим пользователям:
chmod 700 ~/.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 man page.
Файл конфигурации SSH также читается другими программами, такими как scp
, sftp
и rsync
.
Пример базового файла конфигурации SSH
Теперь, когда мы рассмотрели основы файла конфигурации SSH, давайте рассмотрим следующий пример.
Обычно, когда вы подключаетесь к удаленному серверу через SSH, вы указываете имя удаленного пользователя, имя хоста и сообщение. Например, чтобы подключиться от имени пользователя andreyex
к хосту, вызываемому через dev.example.com
порт 2322
из командной строки, введите:
ssh andreyex@dev.example.com -p 2322
Если вы хотите подключиться к серверу, используя те же параметры, что и в приведенной выше команде, просто набрав named, ssh dev
вам нужно добавить в файл "~/.ssh/config
следующие строки:
Host dev HostName dev.example.com User andreyex Port 2322
Теперь, если вы введете:
ssh dev
Клиент ssh прочитает файл конфигурации и будет использовать сведения о соединении, указанные для хоста dev
.
Пример общего файла конфигурации SSH
Этот пример дает более подробную информацию о шаблонах хостов и приоритетах опций.
Давайте возьмем следующий пример файла:
Host alex HostName 192.168.1.10 User andreyex Port 7654 IdentityFile ~/.ssh/alex.key Host maxim HostName 192.168.10.20 Host denis HostName 192.168.10.50 Host *im user destroyer Host * !denis LogLevel INFO Host * User root Compression yes
- Если вы введете
ssh alex
в ssh, клиент прочтет файл и применит параметры первого совпаденияHost alex
. Затем он проверит следующие строфы один за другим на соответствие шаблону. Следующий совпадающийHost * !denis
означает, что все хосты, кроме,denis
он будет применять параметр подключения из этого раздела. Наконец, последнее определениеHost *
также соответствует, но клиент ssh выберет только опциюCompression
, потому что эта опцияUser
уже определена в разделеHost alex
. Полный список параметров, используемых в этом случае, выглядит следующим образом:HostName 192.168.1.10 User andreyex Port 7654 IdentityFile ~/.ssh/alex.key LogLevel INFO Compression yes
- При работе
ssh alex
шаблоны соответствия хоста являются:Host maxim
,Host * !denis
иHost *
. Варианты, используемые в этом случае:HostName 192.168.10.20 LogLevel INFO Compression yes
- Если вы запускаете
ssh denis
соответствующий узел моделей являются:Host denis
иHost *
. В этом случае используются следующие параметры:HostName 192.168.10.50 Compression yes
- Для всех других вариантов соединений, указанных в секциях
Host * !denis
иHost *
будут использоваться.
Переопределить опцию файла конфигурации SSH
Клиент ssh получает свою конфигурацию в следующем порядке приоритета:
- Параметры, указанные в командной строке
- Параметры, определенные в
~/.ssh/config
- Параметры, определенные в
/etc/ssh/ssh_config
Если вы хотите переопределить один параметр, вы можете указать его в командной строке. Например, если у вас есть следующее определение:
Host dev HostName dev.example.com User andreyex Port 2322
и вы хотите использовать все остальные параметры, кроме как для подключения в качестве пользователя, root
а не andreyex
просто указать пользователя в командной строке:
ssh -o "User=root" dev
Переключатель -F
( configfile
) позволяет указать альтернативный файл конфигурации для каждого пользователя.
Если вы хотите, чтобы ваш ssh-клиент игнорировал все параметры, указанные в вашем конфигурационном файле ssh, вы можете использовать:
ssh -F /dev/null user@example.com
Заключение
Вы узнали, как настроить пользовательский конфигурационный файл ssh. Вы также можете настроить аутентификацию на основе ключей SSH и подключаться к серверам Linux без ввода пароля.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.