Управление SSH-соединениями в Linux / Unix с помощью файла конфигурации SSH

Управление 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. Это довольно удобно, и вы можете устанавливать различные параметры для различных удаленных хостов. Надеюсь, вам понравилось руководство и все самое лучшее в ваших конфигурациях.

Author: forgero

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *