Если вы регулярно подключаетесь к нескольким удаленным системам по SSH на ежедневной основе, вы обнаружите, что запоминание всех удаленных IP-адресов, различных имен пользователей, нестандартных портов и различных параметров командной строки является трудным, если не невозможным.
Одним из вариантов будет создать псевдоним Bash для каждого соединения с удаленным сервером. Однако есть и другое, гораздо лучшее и более простое решение этой проблемы. OpenSSH позволяет Вам настроить файл конфигурации для каждого пользователя, где вы можете хранить различные варианты SSH для каждой удаленной машины, к которой вы подключаетесь.
Эта статья описывает основы файла конфигурации клиента SSH и объясняет некоторые из наиболее распространенных параметров конфигурации.
Мы предполагаем, что Вы используете систему Linux или macOS с установленным клиентом OpenSSH.
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 имеет следующую структуру:
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, вы указываете имя удаленного пользователя, имя хоста и сообщение. Например, чтобы подключиться от имени пользователя 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
.
Этот пример дает более подробную информацию о шаблонах хостов и приоритетах опций.
Давайте возьмем следующий пример файла:
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/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 без ввода пароля.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.
No more authentication methods to try.