Протокол SSH или Secure Shell используется для удаленного входа в систему и выполнения команд на удаленной машине. Данные, передаваемые по протоколу SSH, шифруются с помощью специальных алгоритмов, что делает SSH более безопасным, чем Telnet. В принципе, OpenSSH - это инструмент, реализующий данный протокол.
Что мы будем рассматривать?
В этом руководстве мы рассмотрим различные аспекты конфигурационного файла сервера OpenSSH. Давайте начнем прямо сейчас.
Конфигурационные файлы OpenSSH
Как для клиента, так и для сервера OpenSSH существует несколько основных файлов. Он имеет два типа конфигурационных файлов:
- Файлы, относящиеся к клиентской части: Один из файлов - ssh_config. Это общесистемный конфигурационный файл. Этот файл расположен по адресу /etc/ssh/ssh_config.
Другой файл - config, который является конфигурационным файлом для конкретного пользователя и находится по адресу $HOME/.ssh/config.
Программа SSH на хосте получает конфигурацию либо из этих файлов, либо через интерфейс командной строки. В случае с указанными файлами приоритет отдается общесистемному файлу конфигурации, которым является ssh_config, а не пользовательскому файлу config. - sshd_config: Он относится к серверной части. Сервер OpenSSH считывает этот файл при запуске.
Изучение конфигурационного файла sshd
Конфигурационный файл sshd содержит множество директив, которые также могут быть настроены. Рассмотрим стандартное расположение этого файла:
1 | cat /etc/ssh/sshd_config |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Это общесистемный конфигурационный файл сервера sshd. Port 2222 ListenAddress 0.0.0.0 ListenAddress :: HostKey /etc/ssh/ssh_host_key ServerKeyBits 768 LoginGraceTime 600 KeyRegenerationInterval 3600 PermitRootLogin yes IgnoreRhosts yes StrictModes yes X11Forwarding no AllowTcpForwarding no PermitTTY no X11DisplayOffset 10 PrintMotd yes KeepAlive yes SyslogFacility AUTH LogLevel INFO RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes PermitEmptyPasswords no CheckMail no |
Любая строка, начинающаяся с символа "#", воспринимается как комментарий. Рассмотрим некоторые из заданных параметров:
- Директива Port задает номер порта. Это номер порта, на котором sshd прослушивает соединения. По умолчанию для этого порта используется стандартное значение 22. Однако в нашем случае мы изменили его на 2222.
Кроме того, мы можем указать более одной директивы Port. Таким образом, мы можем использовать несколько портов для прослушивания соединений sshd. - ListenAddress содержит IP-адрес для прослушивания. По умолчанию прослушиваются все IP-адреса, привязанные к серверу. Также обратите внимание, что директива Port должна следовать за директивой ListenAddress.
- Директива HostKey указывает полный путь к файлу закрытого ключа хоста RSA. В предыдущем случае путь имеет вид /etc/ssh/ssh_host_key.
- Директива PermitRootLogin разрешает вход root в систему sshd, если она установлена в значение yes. Это значение должно быть установлено в no, если для ограничения доступа к sshd не используются файлы hosts.allow и hosts.deny.
- Директива X11Forwarding разрешает переадресацию X Window System, если установлено значение yes.
- Средство Syslog, которое должен использовать sshd, задается с помощью директивы SyslogFacility. Значение по умолчанию оставьте прежним.
- Уровень протоколирования для Syslog задается с помощью директивы LogLevel.
Изменение порта sshd
По умолчанию демон сервера sshd или OpenSSH использует порт 22 протокола TCP. В тестовой среде рекомендуется изменить номер этого порта на другое значение. Это гарантирует постоянную доступность соединения с сервером.
Кроме того, перед использованием нового файла sshd_config следует проверить синтаксис его конфигурации, независимо от того, на каком порту он работает. Для проверки синтаксиса можно воспользоваться следующей командой:
1 | sshd -t |
Важно также отметить, что только пользователь root должен иметь возможность читать и писать в этот файл. Это означает, что если конфигурационный файл sshd_config должным образом защищен, то для выполнения предыдущей команды необходимы права root.
Если при выполнении предыдущей команды проверки синтаксиса не появилось никаких результатов, это означает, что с файлом все в порядке.
Изменение конфигурационного файла и порта по умолчанию
В некоторых случаях требуется запустить новый экземпляр sshd на другом порту. Это может быть связано с тем, что порт 22 уже используется, или с тем, что изменение этого порта в производственной среде сопряжено с определенными рисками. В таких ситуациях мы можем создать альтернативный конфигурационный файл для нашего сервера.
Давайте создадим новый файл sshd_config под именем sshd_config_new. Этот файл может быть использован для различных параметров сервера. Теперь укажем этот файл в качестве нового файла конфигурации сервера на порту с номером 100:
1 | sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_new -p 100 |
Теперь демон sshd прослушивает порт 100. Мы можем использовать любое значение порта, но не то, которое уже используется.
Теперь давайте проверим, работает ли наш новый порт так, как нужно. Для этого необходимо воспользоваться программой-клиентом ssh и выполнить следующую команду:
1 | /usr/bin/ssh -p 100 <ip сервера> |
Опция "-p" задает порт 100, который будет использоваться на удаленном сервере. В случае локального тестирования мы можем использовать в качестве IP-адреса сервера IP-адрес localhost:
1 | /usr/bin/ssh -p 100 127.0.0.1 |
Поиск и устранение неисправностей в конфигурации OpenSSH
Иногда наш сервер работает не так, как хотелось бы. В таких случаях мы можем использовать флаг "-d" для диагностики конфигурации сервера OpenSSH. При использовании флага "-d" сервер переходит в режим отладки и обрабатывает только одно соединение.
Вывод, который производится в режиме отладки, является многословным. Мы можем использовать больше флагов "-d" для повышения уровня отладки. Запустим команду debug на нашем сервере, используя новый конфигурационный файл:
1 | /usr/sbin/sshd -d -p 100 -f /etc/ssh/sshd_config_new |
Выходные данные предыдущей команды записываются в stderr вместо использования средства AUTH в syslogd.
Заключение
Демон OpenSSH или sshd является важнейшей частью многих инфраструктур администрирования. Поэтому для его оптимальной работы требуются специальные знания. В этой статье мы познакомились с таким файлом конфигурации сервера OpenSSH, как sshd_config.