• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

SSH_CONFIG

Назначение ssh_config

В ежедневной работе системного администратора использование ssh-клиента (OpenSSH client) — обычная практика. Однако, прописывание длинных и сложных команд по конфигурированию параметров SSH вручную, в командной строке в терминале, отнимает у специалиста много лишнего времени. Начинающие администраторы, инженеры и пользователи Linux возможно не знакомы с таким простым и удобным способом настройки параметров SSH, как использование файла ssh_config.

В каких же случаях вам необходим ssh config? Представьте себе ситуацию, когда ваша задача — ежедневное подключение к нескольким удаленным серверам, причем с различными настройками (IP-адресом, логином и паролем, номерами портов и другими параметрами командной строки). Согласитесь, что вводить каждый раз все эти данные вручную — это нерациональная трата рабочего времени. Как же решить такую проблему? Одно из возможных решений — создание ssh bash alias (псевдонима) для каждого соединения с удаленным сервером. Однако, можно предложить более оптимальный вариант — создать файл конфигурации для каждого пользователя, в котором будут храниться различные параметры SSH для каждого удаленного хоста, к которому вы будете подключаться.

В данной статье мы рассмотрим настройку файла ssh_config только для клиента OpenSSH на локальной машине пользователя (не затрагивая установки на удаленном сервере).

Принцип работы ssh_config

Параметры конфигурации SSH соединения можно прописать с помощью трех указанных ниже способов*:

  1. в опциях, задаваемых с помощью командной строки;
  2. в настройках файла конфигурации конкретного пользователя ~/.ssh/ssh_config;
  3. в общесистемном конфигурационном файле (для всех пользователей данного локального компьютера) /etc/ssh/ssh_config;

*Примечание: наибольший приоритет имеет командная строка, затем идет ~/.ssh/ssh_config и в последнюю очередь уже /etc/ssh/ssh_config.

Покажем на простом примере, как создать и отредактировать под Ubuntu ssh config file для конкретного пользователя локальной машины.

  • Если файл ssh_config не создан, то необходимо его создать с помощью команды:
touch ~/.ssh/config
  • На следующем этапе нужно отредактировать данный файл
    в nano ~/.ssh/config таким образом:
Host freehostUA
      HostName 178.20.153.253
     Port 22
    User root

Где: Host — это alias (псевдоним) для нашего SSH-соединения, HostName — IP адрес VPS (или имя хоста, если включен DNS), Port — номер порта, User — имя пользователя.

Редактирование файла ssh­_config

С помощью несложных настроек мы создали alias для нашего VPS на FREEhost.UA, таким образом, соединиться с нашим удаленным сервером можно будет с помощью простой команды в терминале:

ssh freehostUA

Соединение с сервером по SSH

Ниже опишем, что означают параметры, используемые в ssh_config, а также дадим примеры типовых настроек.

Linux подобную ОС Ubuntu можно установить на наш VPS хостинг.

Параметры ssh_config

Все параметры, которые вы сможете использовать в работе с файлом ssh_config можно посмотреть, выполнив команду:

man ssh_config

Выполнение команды man ssh_config

Для решения типовых задач в работе системного администратора советуем обратить внимание на следующие параметры настроек*:

  • Host — alias (псевдоним), произвольное наименование хоста.
  • HostName — IP адрес удаленного сервера или имя хоста (если настроен DNS).
  • Port — номер порта (если он нестандартный, по умолчанию используется порт 22).
  • User — имя пользователя.
  • IdentityFile — указывается путь к SSH-ключу, который используется для аутентификации при соединении с удаленным сервером (как правило, применяется в том случае, когда ключи не хранятся в директории «по умолчанию»).
  • IdentitiesOnly — сообщает клиенту SSH, какой именно ключ следует использовать для аутентификации на сервере (а не любые ключи, которые находятся в папке для ключей «по умолчанию»). В некоторых случаях может использоваться вместе с параметром IdentityFile, если этот параметр прописан в файле ssh_config, то будут проверены все ключи, даже те, которые пользователь введет в командной строке.
  • ServerAliveInterval и ServerAliveCountMax — ssh-клиент будет запрашивать ответ от удаленного хоста, даже если он не получает никаких данных в указанный интервал времени. Эти параметры помогут предотвратить сбрасывание соединения по причине отсутствия активности.
  • CertificateFile — используется опционально, совместно с параметром IdentityFile для точного указания сертификата, который необходимо предоставить для аутентификации.
  • PreferredAuthentications — параметр, который устанавливает в каком порядке будут использоваться методы аутентификации (по умолчанию: gssapi-with-mic, hostbased аутентификация, аутентификация на базе SSH-ключей, keyboard-interactive и вход по паролю).
  • SetEnv и SendEnv — эти параметры разрешают ssh-клиенту передавать локальные переменные среды на указанный удаленный хост, при этом сервер должен быть настроен для приема этих переменных. Для этого системный администратор должен на удаленном сервере в файле /etc/ssh/sshd_config установить значение Yes для параметра AcceptEnv.
  • HostKeyAlias — клиенту SSH дается указание использовать псевдоним ключа (key alias) из файла ~/.ssh/known_hosts вместо HostName. Данный параметр будет полезен для хостов с динамическими IP-адресами.
  • ProxyJump — с помощью этой опции можно организовать SSH Jump Server (jump host или bastion host), используя флаг –J при написании команды.
  • ForwardAgent и AddKeysToAgent — эта опция служит для организации безопасного проброса ключа (agent forwarding), позволяет осуществить доступ удаленного хоста к локальному SSH-агенту пользователя.

*Примечание: ниже покажем на примерах, как использовать данные опции в файле ssh_config.

Примеры файлов ssh_config для организации доступа к серверам по SSH

Пример файла ssh_config с применением метода аутентификации на основе SSH-ключей

В примере файла приведена директория для пользователя root на локальной машине, в которой хранится SSH-ключ (при написании файла, вы можете подставить свои данные). Также в этом примере покажем, как создавать несколько псевдонимов в ssh_config для соединения по SSH к различным серверам (в первом случае — это наш сервер на FREEhost.UA, во втором случае — это сервер базы данных).

Host freehostUA
      HostName 178.20.153.253
     Port 22
    User root
   IdentityFile /root/.ssh/id_rsa
Host DB1
       HostName db1.server.ua
      Port 2222
     User adminDB

Файл ssh_config для соединения по SSH к различным серверам

*Примечание: Как создать пару SSH-ключей под Linux подробно описано в статье на нашем сайте FREEhost.UA

Решение проблемы подвисшей SSH-сессии

Приведем еще один пример файла ssh_config, но уже с использованием параметров ServerAliveInterval, ServerAliveCountMax и PreferredAuthentications (в данном примере выбран метод аутентификации publickey, т.е. с использованием SSH-ключей):

Host test1
    HostName test1.freehost.com.ua
    User root
    PreferredAuthentications publickey
    ServerAliveInternal 5
    ServerAliveCountMax 1

Иногда сессии SSH могут зависать по причине проблем с качеством связи и по др. причинам. Что происходит в данном случае? SSH начнет проверять соединение, выполняя отправку запросов echo на удаленный сервер в течении определенных промежутков времени. За это отвечает параметр ServerAliveInterval. Если же без ответа останется больше запросов, чем задано в параметре ServerAliveCountMax, то SSH закроет данное соединение.

Организация SSH Jump Server

SSH Jump Server — это сервер под управлением ОС Линукс, единственный в корпоративной сети компании, доступный из сети Интернет. Такой сервер применяется как шлюз в частной сети для получения доступа к другим компьютерам под Linux, используя SSH. Bastion host — единственный шлюз, через который можно получить доступ к ИТ-инфраструктуре компании. Это очень действенная мера в плане обеспечения кибербезопасности и защиты от атак злоумышленников. Для системного администратора наличие Jump host в корпоративной сети существенно упрощает ведение учета всех SSH-соединений. С помощью командной строки эту функцию можно реализовать, используя флаг –J.

Например, если вы имеете доступ к «бастиону» bastion.server.ua, то вы получаете возможность доступа к другим серверам в локальной сети организации, которые расположены за NAT, для этого нужно применить флаг -J в командной строке:

ssh -J bastion.server.ua 10.200.36.150

где 10.200.36.150 — это IP адрес станции в локальной сети, к которой вы планируете подключение.

Однако, вместо ввода команды в терминале проще сразу прописать данную функцию в файле ssh_config:

Host 10.1.1.*
           ProxyJump bastion.server.ua

Когда администратор введет команду ssh 10.200.36.150 в терминале, SSH-клиент установит соединение c bastion.server.ua, в результате чего, оно будет перенаправлено на IP 10.200.36.150 в локальной сети. Конечно же, мы показали самый простой пример использования опции ProxyJump в ssh_config, для более серьезных решений необходимо еще провести дополнительные настройки на удаленном сервере, но эта тема уже для отдельной статьи про Jump host.

Заключение

В заключении хочется сказать, если вы работаете по SSH, как обычный пользователь и применяете только очень простые команды, то возможно вам будет удобней работать с командной строкой.

Однако, в каждодневной деятельности системного администратора, который работает с корпоративными решениями (с различными серверами, локальными сетями и т.д.), выполняет множество настроек и опций, использование командной строки будет лишней тратой рабочего времени. Намного эффективней использовать настройки файла ssh_config, в чем вам и поможет наш материал, где мы постарались осветить основные параметры этого файла, а также показать примеры типовых настроек, которые вам понадобятся для работы. Использование ssh_config будет так же полезно для автоматизации работы, при написании скриптов выполняющих самостоятельно команды на удаленных серверах.

Если же у вас возникают проблемы с более сложной и индивидуальной настройкой ssh_config, то вы всегда можете обратиться за консультацией к специалистам нашей компании FREEhost.UA.

Дата: 16.12.2020
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA