Управление SSH-соединениями в Linux / Unix с помощью файла конфигурации SSH
Управление SSH-соединениями в Linux / Unix с помощью файла конфигурации SSH
SSH (Secure Shell) обычно используется для доступа к удаленным серверам Linux / Unix. Для доступа к удаленному серверу требуется указать имя пользователя, имя хоста или IP-адрес и пароль, или в большинстве случаев для повышения безопасности используется ключ ssh. Если вы имеете дело только с одним удаленным сервером, легко просто запустить синтаксис ssh для доступа, так как вы легко запомните IP-адрес или имя хоста. Однако, когда дело доходит до управления несколькими удаленными серверами, становится критически важным иметь инструмент управления ssh, который избавит вас от необходимости управлять всеми удаленными хостами и их учетными данными. В этом случае нам на помощь приходит конфигурационный файл ssh.
Чтобы иметь возможность использовать файл конфигурации ssh, нам необходимо установить ssh в вашей системе. Большинство серверов Linux поставляются с уже установленным ssh. Его файлы хранятся в каталоге ~ / .ssh .
$ ls -l ~/.ssh/
total 16
-rw-------. 1 lorna lorna 2602 Jul 21 17:23 id_rsa
-rw-r--r--. 1 lorna lorna 566 Jul 21 17:23 id_rsa.pub
-rw-------. 1 lorna lorna 1505 Jul 21 17:24 known_hosts
-rw-------. 1 lorna lorna 759 Jul 21 17:24 known_hosts.old
Как видите, папка содержит несколько файлов, как описано ниже:
- id_rsa — хранит закрытый ключ, который для аутентификации удаленного доступа с использованием ключей ssh
- id_rsa.pub — хранит публичный ключ
- known_hosts — хранит открытые ключи для всех подключенных хостов.
В этом каталоге мы можем создать файл конфигурации ssh, который определяет все хосты, их имена хостов, имена пользователей и пароли, называемые профилями. Количество создаваемых профилей не ограничено. Это позволит нам легко управлять ssh-подключением и избежать суеты, связанной с необходимостью запоминать все. В обычных случаях я бы подключился к удаленному серверу Linux, используя синтаксис ниже
$ ssh user@remote-ip
#Example
$ ssh root@192.168.50.2
В приведенном выше случае мы передаем удаленное имя пользователя и IP-адрес или имя хоста сервера. Порт по умолчанию для ssh — 22, который нам не нужно писать. Если бы мы использовали другой порт, мы бы использовали флаг -p, а затем номер порта, как показано.
ssh user@remote-ip -p 20222
Создание файла конфигурации пользователя ssh
Теперь давайте создадим файл конфигурации (если он еще не существует) с профилем для указанного выше подключения и увидим разницу в подключении
touch ~/.ssh/config
Возможно, вам потребуется установить разрешения для файла конфигурации
chmod 600 ~/.ssh/config
Добавьте приведенный ниже контент в файл
$ vim~/.ssh/config
Host server1
Hostname 192.168.50.2
user root
port 20222
Где:
- server1 — псевдоним удаленного сервера, используемый для ssh
- 192.168.50.2 — IP-адрес удаленной системы
- root — это имя учетной записи пользователя в удаленной системе, под которой мы будем входить.
- 20222 — это сервисный порт SSH, настроенный в удаленной системе.
После сохранения файла подключитесь к server1, как показано ниже. Вам будет предложено ввести пароль.
ssh server1
Как видите, нам нужно только запомнить имя профиля. Ssh будет искать соответствующую информацию в файле конфигурации и использовать определенные параметры для доступа. Вы можете добавить столько профилей, сколько сможете, как показано ниже:
Host server1
Hostname 192.168.50.2
User root
Port 20222
Host server2
Hostname 192.168.50.3
User user1
Port 20223
Host server3
Hostname 192.168.50.4
User user2
Port 20224
Передача общего параметра для всех хостов в пользовательском файле SSH
Если это параметр, который применяется ко всем хостам, вы можете передать его, используя *, как показано ниже в нижней части файла. В этом случае предполагается, что пользователем удаленного входа для всех узлов является lorna . Вы можете добавить все используемые по умолчанию параметры.
Host *
user lorna
Переопределение параметров файла конфигурации пользователя ssh
Если вы объявили параметр в файле конфигурации и, вероятно, хотите использовать другой параметр, но не изменять настройки конфигурации, вы можете переопределить, используя флаг -o. Например, предположим, что на удаленном сервере1, указанном выше, есть более одного пользователя для входа в систему, и вы уже объявили его в файле конфигурации, чтобы использовать другого пользователя, команда выглядит следующим образом:
ssh -o "User=lorna" server1
Установка ключа идентификации в файле конфигурации пользователя SSH
Если вы подключаетесь к удаленным серверам с использованием ключей ssh вместо пароля, вы можете объявить часть закрытого ключа, как показано ниже. Помните, что вы не можете сохранять пароли в файле конфигурации, и для удаленного доступа рекомендуется использовать ssh-ключи.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
Только идентификаторы файлов пользователей SSH
Определив путь к ключам идентификации, как в приведенной выше конфигурации, ssh все равно будет просматривать доступные идентификаторы, пока не найдет подходящий. Обычно это приводит к ошибкам аутентификации, которые увеличиваются с увеличением количества доступных идентификаторов. Чтобы указать ssh использовать только указанный ключ, мы используем параметр IdentitiesOnly, как показано ниже:
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Пользовательский файл UserKeychain SSH
Если для аутентификации с помощью ssh-ключа требуется пароль, вы можете использовать UserKeyChain, чтобы вы могли ввести пароль только в первый раз, и он будет сохранен в связке ключей macOS или связке ключей Gnome.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKeychain yes
Настройка файла известных пользователю хостов
Файл известных хостов позволяет клиенту аутентифицировать удаленные серверы. Он содержит список ключей для удаленных серверов, к которым подключился пользователь. Это помогает пользователю убедиться, что он не подключается к неправильным удаленным серверам. Каждый раз, когда вы устанавливаете ssh-соединение с удаленным сервером, он показывает вам открытый ключ и подтверждение соответствующего закрытого ключа.
Отпечатки удаленного сервера добавляются в файл know_hosts , если у вас их еще нет, так что каждый раз, когда вы обращаетесь к одному и тому же серверу, он сверяется с существующим отпечатком. Вот почему, если вы переустановите удаленный сервер и снова попытаетесь подключиться к нему по ssh, вы получите предупреждение о неизвестном отпечатке пальца, поскольку он мог измениться в процессе переустановки. Эта проверка выполняется с помощью параметра StrictHostKeyChecking . Вы также можете передать известный путь к файлу hosts.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/known_hosts
StrictHostKeyChecking yes
Host server2
Hostname 192.168.50.3
User root
Port 2022
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
StrictHostKeyChecking no
Время ожидания соединения SSH и интервал активности сервера
Если пользовательский клиент подключается к удаленному серверу и остается неактивным, он должен подключиться снова. Сеанс остается активным только тогда, когда пользователь работает на сервере. Время ожидания подключения определяет, как долго пользователь остается неактивным до истечения времени ожидания сеанса. Параметр, используемый для определения тайм-аута подключения, — ServerAliveCountMax . ServerAliveInterval, с другой стороны, определяет интервалы, в которые ssh отправляет пакеты для проверки доступности сервера.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/known_hosts
#UserKnownHostsFile /dev/null
StrictHostKeyChecking yes
ServerAliveInterval 60
ServerAliveCountMax 720
Уровень журнала файла конфигурации пользователя SSH
Параметр LogLevel определяет степень детализации журналов ssh на стороне клиента. Наиболее часто используемые значения: ERROR , FATAL , QUIET , VERBOSE , INFO , DEBUG1 и т. Д.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/known_hosts
StrictHostKeyChecking yes
ServerAliveInterval 60
ServerAliveCountMax 720
LogLevel INFO
Включение другого файла конфигурации в файл конфигурации пользователя SSH
Если у вас уже есть другой файл конфигурации и вы хотите использовать его в текущем файле, вам следует использовать предложение Include , определяющее путь к другому файлу конфигурации, в верхней части текущего файла, как показано ниже. Вы должны указать абсолютный путь к файлу, иначе ssh будет считать, что они находятся в ~ / .ssh
Include <path-to-file>
#exampleInclude ~/.ssh/config.d/myservers
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/myid_rsa
IdentitiesOnly yes
UserKnownHostsFile /dev/null
StrictHostKeyChecking yes
ServerAliveInterval 60
ServerAliveCountMax 720
LogLevel INFO
В этом руководстве мы увидели простой способ управления удаленными ssh-соединениями с помощью файла конфигурации пользователя ssh. Это довольно удобно, и вы можете устанавливать различные параметры для различных удаленных хостов. Надеюсь, вам понравилось руководство и все самое лучшее в ваших конфигурациях.