Если вы регулярно подключаетесь к нескольким удаленным системам через SSH, вы обнаружите, что запомнить все удаленные IP-адреса, разные имена пользователей, нестандартные порты и различные параметры командной строки сложно, если вообще возможно.
Один из вариантов — создать псевдоним bash для каждого подключения к удаленному серверу. Однако есть другое, гораздо лучшее и более простое решение этой проблемы. OpenSSH позволяет вам создать файл конфигурации для каждого пользователя, в котором вы можете хранить различные параметры SSH для каждой удаленной машины, к которой вы подключаетесь.
В этом руководстве рассматриваются основы файла конфигурации клиента SSH и объясняются некоторые из наиболее распространенных параметров конфигурации.
Содержание
Подготовка
Мы предполагаем, что вы используете систему Linux или macOS с установленным клиентом OpenSSH.
Расположение файла конфигурации SSH
Файл конфигурации на стороне клиента OpenSSH называется config
и хранится в каталоге .ssh
в домашнем каталоге пользователя.
Каталог ~/.ssh
создается автоматически, когда пользователь запускает команду ssh
в первый раз. Если каталог не существует в вашей системе, создайте его с помощью следующей команды:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
По умолчанию файл конфигурации SSH может не существовать, поэтому вам может потребоваться создать его с помощью сенсорной команды :
touch ~/.ssh/config
Этот файл должен быть доступен для чтения и записи только пользователю и не должен быть доступен для других:
chmod 600 ~/.ssh/config
Структура и шаблоны файла конфигурации SSH
Файл конфигурации 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 .
Файл конфигурации SSH также читается другими программами, такими как scp
, sftp
и rsync
.
Пример файла конфигурации SSH
Теперь, когда мы рассмотрели основы файла конфигурации SSH, давайте посмотрим на следующий пример.
Обычно при подключении к удаленному серверу через SSH вы указываете имя удаленного пользователя, имя хоста и порт. Например, чтобы войти в систему как пользователь с именем john
на хост с именем dev.example.com
на порту 2322
из командной строки, вы должны ввести:
ssh [email protected] -p 2322
Чтобы подключиться к серверу с использованием тех же параметров, которые указаны в приведенной выше команде, просто набрав ssh dev
, поместите следующие строки в свой "~/.ssh/config
:
Host dev
HostName dev.example.com
User john
Port 2322
Теперь, когда вы вводите ssh dev
, клиент ssh будет читать файл конфигурации и использовать данные подключения, указанные для хоста dev
:
ssh dev
Пример файла конфигурации общего SSH
Этот пример дает более подробную информацию о шаблонах хоста и приоритетах опций.
Возьмем следующий пример файла:
Host targaryen
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
Host tyrell
HostName 192.168.10.20
Host martell
HostName 192.168.10.50
Host *ell
user oberyn
Host * !martell
LogLevel INFO
Host *
User root
Compression yes
-
Когда вы вводите
ssh targaryen
, клиент ssh читает файл и применяет параметры из первого совпадения, то естьHost targaryen
. Затем он проверяет следующие строфы одну за другой на соответствие шаблону. Следующим подходящим являетсяHost * !martell
(то есть все хосты, кромеmartell
), и он применит параметр подключения из этой строфы. Последнее определениеHost *
также совпадает, но клиент ssh будет использовать только параметрCompression
поскольку параметрUser
уже определен в разделеHost targaryen
.Полный список параметров, используемых при
ssh targaryen
выглядит следующим образом:HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
-
При запуске
ssh tyrell
подходящими шаблонами хоста являются:Host tyrell
,Host *ell
,Host * !martell
иHost *
. В этом случае используются следующие параметры:HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
-
Если вы запустите
ssh martell
, соответствующие шаблоны хостов будут следующими:Host martell
,Host *ell
иHost *
. В этом случае используются следующие параметры:HostName 192.168.10.50 User oberyn Compression yes
-
Для всех остальных подключений клиент ssh будет использовать параметры, указанные в разделах
Host * !martell
иHost *
.
Переопределить параметр файла конфигурации SSH
Клиент ssh читает свою конфигурацию в следующем порядке приоритета:
- Параметры, указанные в командной строке.
- Параметры, определенные в
~/.ssh/config
. - Параметры, определенные в
/etc/ssh/ssh_config
.
Если вы хотите переопределить один параметр, вы можете указать его в командной строке. Например, если у вас есть следующее определение:
Host dev
HostName dev.example.com
User john
Port 2322
и вы хотите использовать все другие параметры, но для подключения от имени пользователя root
вместо john
просто укажите пользователя в командной строке:
ssh -o "User=root" dev
Параметр -F
( configfile
) позволяет указать альтернативный файл конфигурации для каждого пользователя.
Чтобы указать ssh
клиенту игнорировать все параметры, указанные в файле конфигурации ssh, используйте:
ssh -F /dev/null [email protected]
Выводы
Мы показали вам, как настроить пользовательский файл конфигурации ssh. Вы также можете настроить аутентификацию на основе ключа SSH и подключаться к своим серверам Linux без ввода пароля.
По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности на ваш сервер, снижая риск автоматических атак.
Если у вас есть вопросы, оставьте комментарий ниже.