Изменить конфигурационный файл службы ssh

Обновлено: 02.07.2024

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

Один из вариантов - создать псевдоним bash для каждого подключения к удаленному серверу. Однако есть другое, гораздо лучшее и более простое решение этой проблемы. OpenSSH позволяет вам настроить файл конфигурации для каждого пользователя, где вы можете хранить различные параметры SSH для каждого удаленного компьютера, к которому вы подключаетесь.

Мы предполагаем, что вы используете систему Linux или macOS с установленным клиентом OpenSSH.


Расположение файла конфигурации SSH

Файл конфигурации OpenSSH на стороне клиента имеет имя config и хранится в .ssh каталоге в домашнем каталоге пользователя.

/.ssh каталог создается автоматически, когда пользователь запускает ssh команду в первый раз. Если каталог не существует в вашей системе, создайте его с помощью команды ниже:


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


Этот файл должен быть доступен для чтения и записи только пользователю и недоступен для других:


Структура и шаблоны файлов SSH Config

Файл конфигурации SSH имеет следующую структуру:

Содержимое файла конфигурации клиента SSH организовано в разделы (разделы). Каждый раздел начинается с Host директивы и содержит конкретные параметры SSH, которые используются при установлении соединения с удаленным сервером SSH.

Отступы не требуются, но рекомендуется, поскольку они облегчают чтение файла.

Host Директива может содержать один шаблон или разделенных пробелами список шаблонов. Каждый шаблон может содержать ноль или более непробельных символов или один из следующих спецификаторов шаблона:

  • * - Соответствует нулю или более символов. Например, Host * сопоставляет все узлы, а 192.168.0.* сопоставляет узлы в 192.168.0.0/24 подсети.
  • ? - соответствует ровно одному персонажу. Шаблон, Host 10.10.0.? соответствует всем хостам в 10.10.0.7 диапазоне.
  • ! - При использовании в начале паттерна он отменяет совпадение. Например, Host 10.10.0.* !10.10.0.5 соответствует любому хосту в 10.10.0.0/24 подсети, кроме 10.10.0.5 .

Клиент SSH считывает раздел файла конфигурации по разделу, и, если совпадают несколько шаблонов, параметры из первого соответствующего раздела имеют приоритет. Поэтому в начале файла должны быть даны более специфичные для хоста объявления, а в конце файла - более общие переопределения.

Вы можете найти полный список доступных опций ssh, набрав man ssh_config в своем терминале или посетив страницу справки ssh_config .

Файл конфигурации SSH также читается другими программами , такими как scp , sftp и rsync .

Пример файла конфигурации SSH

Теперь, когда мы рассмотрели основы файла конфигурации SSH, давайте рассмотрим следующий пример.


Чтобы подключиться к серверу, используя те же параметры, что и в приведенной выше команде, просто набрав ssh dev , поместите в "

/.ssh/config файл следующие строки :

Теперь, когда вы ssh dev печатаете, клиент ssh будет читать файл конфигурации и использовать сведения о соединении, которые указаны для dev хоста:

Пример общего файла конфигурации SSH

Этот пример дает более подробную информацию о шаблонах хостов и приоритетах опций.

Давайте возьмем следующий пример файла:

Когда вы ssh targaryen печатаете, клиент ssh читает файл и применяет параметры из первого совпадения, которое есть Host targaryen . Затем он проверяет следующие строфы один за другим на соответствие шаблону. Следующий соответствующий Host * !martell (это означает, что все хосты, кроме martell ), и он будет применять параметр подключения из этого раздела. Последнее определение Host * также совпадает, но клиент ssh выберет только Compression опцию, потому что эта User опция уже определена в разделе Host targaryen .

Полный список параметров, используемых при вводе, ssh targaryen выглядит следующим образом:

При работе ssh tyrell в соответствующие структуры хозяева: Host tyrell , Host *ell , Host * !martell и Host * . Варианты, используемые в этом случае:

Если вы бежите ssh martell , шаблоны соответствия хозяева: Host martell , Host *ell и Host * . Варианты, используемые в этом случае:

Для всех других соединений, клиент SSH будет использовать параметры , указанные в Host * !martell и Host * разделах.

Переопределить опцию файла конфигурации SSH

Клиент ssh считывает свою конфигурацию в следующем порядке приоритета:

  1. Параметры, указанные в командной строке.
  2. Параметры, определенные в

Если вы хотите переопределить один параметр, вы можете указать его в командной строке. Например, если у вас есть следующее определение:

и вы хотите использовать все остальные параметры, кроме как для подключения в качестве пользователя, root а не john просто указать пользователя в командной строке:

Опция -F ( configfile ) позволяет вам указать альтернативный файл конфигурации для каждого пользователя.

Чтобы указать ssh клиенту игнорировать все параметры, указанные в файле конфигурации ssh, используйте:

Вывод

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

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

Если вы регулярно подключаетесь к нескольким удаленным системам через SSH, вы обнаружите, что запомнить все удаленные IP-адреса, разные имена пользователей, нестандартные порты и различные параметры командной строки сложно, если вообще возможно.

В этом руководстве рассматриваются основы файла конфигурации клиента SSH и объясняются некоторые из наиболее распространенных параметров конфигурации.

Подготовка

Мы предполагаем, что вы используете систему Linux или macOS с установленным клиентом OpenSSH.

Расположение файла конфигурации SSH

Файл конфигурации на стороне клиента OpenSSH называется config и хранится в каталоге .ssh в домашнем каталоге пользователя.

/.ssh создается автоматически, когда пользователь запускает команду ssh в первый раз. Если каталог не существует в вашей системе, создайте его с помощью следующей команды:

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

Этот файл должен быть доступен для чтения и записи только пользователю и не должен быть доступен для других:

Структура и шаблоны файла конфигурации SSH

Файл конфигурации SSH имеет следующую структуру:

Содержимое файла конфигурации клиента SSH организовано в строфы (разделы). Каждый раздел начинается с директивы Host и содержит определенные параметры SSH, которые используются при установлении соединения с удаленным SSH-сервером.

Отступ не требуется, но рекомендуется, так как он облегчает чтение файла.

Директива Host может содержать один шаблон или список шаблонов, разделенных пробелами. Каждый шаблон может содержать ноль или более непробельных символов или один из следующих спецификаторов шаблона:

Вы можете найти полный список доступных опций ssh, набрав man ssh_config в своем терминале или посетив справочную страницу ssh_config .

Файл конфигурации SSH также читается другими программами, такими как scp , sftp и rsync .

Пример файла конфигурации SSH

Теперь, когда мы рассмотрели основы файла конфигурации SSH, давайте посмотрим на следующий пример.

Чтобы подключиться к серверу с использованием тех же параметров, которые указаны в приведенной выше команде, просто набрав ssh dev , поместите следующие строки в свой "

Теперь, когда вы вводите ssh dev , клиент ssh будет читать файл конфигурации и использовать данные подключения, указанные для хоста dev :

Пример файла конфигурации общего SSH

Этот пример дает более подробную информацию о шаблонах хоста и приоритетах опций.

Возьмем следующий пример файла:

Когда вы вводите ssh targaryen , клиент ssh читает файл и применяет параметры из первого совпадения, то есть Host targaryen . Затем он проверяет следующие строфы одну за другой на соответствие шаблону. Следующим подходящим является Host * !martell (то есть все хосты, кроме martell ), и он применит параметр подключения из этой строфы. Последнее определение Host * также совпадает, но клиент ssh будет использовать только параметр Compression поскольку параметр User уже определен в разделе Host targaryen .

Полный список параметров, используемых при ssh targaryen выглядит следующим образом:

При запуске ssh tyrell подходящими шаблонами хоста являются: Host tyrell , Host *ell , Host * !martell и Host * . В этом случае используются следующие параметры:

Если вы запустите ssh martell , соответствующие шаблоны хостов будут следующими: Host martell , Host *ell и Host * . В этом случае используются следующие параметры:

Для всех остальных подключений клиент ssh будет использовать параметры, указанные в разделах Host * !martell и Host * .

Переопределить параметр файла конфигурации SSH

Клиент ssh читает свою конфигурацию в следующем порядке приоритета:

  1. Параметры, указанные в командной строке.
  2. Параметры, определенные в

Если вы хотите переопределить один параметр, вы можете указать его в командной строке. Например, если у вас есть следующее определение:

и вы хотите использовать все другие параметры, но для подключения от имени пользователя root вместо john просто укажите пользователя в командной строке:

Параметр -F ( configfile ) позволяет указать альтернативный файл конфигурации для каждого пользователя.

Чтобы указать ssh клиенту игнорировать все параметры, указанные в файле конфигурации ssh, используйте:

Выводы

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

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

В этом руководстве мы покажем вам, как настроить аутентификацию на основе ключа SSH, а также как подключиться к вашему серверу Linux без ввода пароля.

Настройка SSH входа без пароля

Чтобы настроить SSH-вход без пароля в Linux, все, что вам нужно сделать, это сгенерировать открытый ключ аутентификации и добавить его в файл

/.ssh/authorized_keys удаленных хостов.

Следующие шаги описывают процесс настройки входа по SSH без пароля:

Проверьте существующую пару ключей SSH.

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

Выполните следующую команду ls, чтобы проверить наличие существующих ключей SSH:

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

Если вы видите No such file or directory или no matches found это означает, что у вас нет ключа SSH, и вы можете перейти к следующему шагу и сгенерировать новый.

Создайте новую пару ключей SSH.

Следующая команда сгенерирует новую пару ключей SSH 4096 бит с вашим адресом электронной почты в качестве комментария:

Нажмите Enter чтобы принять расположение и имя файла по умолчанию:

Затем инструмент ssh-keygen попросит вас ввести безопасную парольную фразу. Независимо от того, хотите ли вы использовать кодовую фразу, решать вам, если вы решите использовать кодовую фразу, вы получите дополнительный уровень безопасности. В большинстве случаев разработчики и системные администраторы используют SSH без парольной фразы, поскольку они полезны для полностью автоматизированных процессов. Если вы не хотите использовать кодовую фразу, просто нажмите Enter .

В целом взаимодействие выглядит так:

Чтобы убедиться, что ключи SSH сгенерированы, вы можете указать свои новые закрытые и открытые ключи с помощью:

Скопируйте открытый ключ

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

Вам будет предложено ввести пароль remote_username :

После аутентификации пользователя открытый ключ будет добавлен в файл authorized_keys удаленного пользователя, и соединение будет закрыто.

Если по какой-либо причине ssh-copy-id недоступна на вашем локальном компьютере, вы можете использовать следующую команду для копирования открытого ключа:

Войдите на свой сервер с помощью ключей SSH

После выполнения описанных выше действий вы сможете войти на удаленный сервер без запроса пароля.

Чтобы проверить это, просто попробуйте войти на свой сервер через SSH:

Если все прошло успешно, вы сразу же войдете в систему.

Отключение аутентификации по паролю SSH

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

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

В следующих руководствах описывается, как настроить доступ sudo:

Войдите на удаленный сервер с помощью ключей SSH, либо как пользователь с привилегиями sudo, либо как пользователь root:

Откройте файл конфигурации SSH /etc/ssh/sshd_config , найдите следующие директивы и измените их следующим образом:

Как только вы закончите, сохраните файл и перезапустите службу SSH.

На серверах Ubuntu или Debian выполните следующую команду:

На серверах CentOS или Fedora выполните следующую команду:

Выводы

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

Мы также показали вам, как отключить аутентификацию по паролю SSH и добавить дополнительный уровень безопасности на ваш сервер.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.


Назначение 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 и в последнюю очередь уже /etc/ssh/ssh_config.

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

  • Если файл ssh_config не создан, то необходимо его создать с помощью команды:

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

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

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

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

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

Параметры ssh_config

Все параметры, которые вы сможете использовать в работе с файлом 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_config.

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

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

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

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

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

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

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

Иногда сессии 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 в командной строке:

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

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

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

Читайте также: