Настройка SSH сервера в Linux / FreeBSD
Сервером нужно как то управлять, для этого используется SSH протокол. Это защищенный протокол для удаленного доступа к консоли сервера. Разберем как включить и настроить SSH сервер в Linux и FreeBSD системах. Конфигурация SSH сервера одинакова в обеих системах, за исключением нескольких параметров и различается процесс добавления в автозагрузку.
1. Автозагрузка SSH сервера
По умолчанию при установке серверной операционной системы SSH сервер уже установлен и в автозагрузке и добавлять его повторно не нужно.
1.1. Добавляем SSH сервер в загрузку Linux
Показываю на примере Linux (Debian 12 BookWorm), на других операционных системах Linux схоже или аналогично.
Если SSH server не установлен, устанавливаем
apt install openssh-server
Проверяем что SSH сервер есть в автозагрузки и запущен
systemctl status ssh
Если параметр Loaded в статусе disabled, значит ssh.service нет в автозагрузке.
Добавляем в автозагрузку
systemctl enable ssh
Запускаем SSH сервер
systemctl start ssh
1.2. Добавляем SSH сервер в загрузку FreeBSD
Открываем файл /etc/rc.conf и добавляем sshd_enable="YES" строку.
nano /etc/rc.conf
sshd_enable="YES"
Запускаем ssh-server командой:
service sshd start
2. Настройка SSH сервера (Конфигурация sshd_config)
Открываем файл конфигурации, находится по пути /etc/ssh/sshd_config
nano /etc/ssh/sshd_config
Если убрать символ решётка # перед параметром, он становится активным и его значение можно изменить на необходимое.
Описание, перевод и пояснение основных параметров файла sshd_config (Параметры по умолчанию закомментированные, если не указно иное)
# Файл конфигурации с описаниями основных параметров которые используются у меня.
# Порт который слушает SSH, по умолчанию 22 (лучше сменить на другой для "безопастности")
Port 22
# Проток IPv4 или IPv6. Возможные значения: "any", "inet","inet6"
#AddressFamily any
# Адрес который слушает SSH сервер. По умолчанию все адреса на сетевых картах.
# Если указать конкретный адрес и потом вдруг он поменяется, то к серверу не получится подключится по новому адресу.
#ListenAddress 0.0.0.0
#ListenAddress ::
# Файлы приватных ключей хоста используемые SSH сервером.
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Уровни логирования
#SyslogFacility AUTH
#LogLevel INFO
# Authentication (Аутентификация):
# Время на авторизацию, значение 0 - бесконечно.
#LoginGraceTime 2m
# Доступные значения для авторизации root пользователя:
# yes - разрешить авторизацию любым способом.
# prohibit-password - запретить авторизацию через пароль, но можно через ключ.
# forced-commands-only - разрешить авторизацию через ключ, если предается параметр command= вместе с ключом.
# no - запретить авторизацию любым способом. (По умолчанию)
# Я привык ходить на сервер сразу под root'ом, поэтому yes. (VDS-хостинги могут блокируют авторизацию по root)
PermitRootLogin yes
# Проверять права доступа к файлам конфигурации и домашнему каталогу пользователя.
#StrictModes yes
# Количество неудачных попыток ввода пароля, после которых данные заносятся в лог. По умолчанию 6
MaxAuthTries 3
# Количество одновременных открытых оболочек, сеансов.
#MaxSessions 10
# Разрешить авторизацию по ключу. (читай: https://notby.net/avtorizatsiya-ssh-cherez-klyuch)
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# Авторизация через механизм rhosts
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# Изменяем значение на yes что бы включить встроенную авторизацию по паролю
# Пароли также могут приниматся через KbdInteractiveAuthentication. (По умлочанию)
#PasswordAuthentication no
#PermitEmptyPasswords no
# Авторизация по паролю через keyboard-interactive authentication.
#KbdInteractiveAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'no' to disable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin prohibit-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
#UsePAM yes
# Разрешить перенаправление. (man ssh-agent)
#AllowAgentForwarding yes
# Разрешить TCP перенаправление
#AllowTcpForwarding yes
# Разрешить удаленным хостам доступ к перенаправлению портов
#GatewayPorts no
# Разрешить перенаправление графической подсистемы X11
#X11Forwarding yes
# Номер первого дисплея
#X11DisplayOffset 10
# Перенаправление ограничено локальным loopback адресом (yes), ограничений нет (no)
#X11UseLocalhost yes
# Разрешить ли распределение (man pty).
#PermitTTY yes
# Показать содержимое файл /etc/motd при входе пользователя.
#PrintMotd yes
# Показать время последнего входа пользователя
#PrintLastLog yes
# Отправлять клиенту TCP сообщение для проверки соединения. Если уставить значение no, то в случаи
# разрыва соединения, сеанс будет длится бесконечно. (ресурсы сервера тратятся)
#TCPKeepAlive yes
# Принимать во внимание файл ~/.ssh/environment и параметр environment= в файле ~/.ssh/authorized_keys
#PermitUserEnvironment no
# Разрешить сжатие сразу (yes), после авторизации (delayed) или запретить (no). По умолчанию yes
#Compression yes
# Время в секундах для параметра ClientAliveCountMax
#ClientAliveInterval 0
# Количество отправленных запросов клиенту по шифрованному каналу с интервалом ClientAliveInterval
# Ответа от клиента не последовало, соединение считает потерянным и сеанс закрывается.
#ClientAliveCountMax 3
# Проверить имя подключаемого хоста и сверить их с тем что передал клиент.
# Если DNS сервер не отвечает, авторизация ssh будет долго ожидать соединение с DNS для проверки.
# Ставим no, это быстрее и не будет проверки. По умолчанию yes
UseDNS no
# Путь до PID файла Linux (Debian)
#PidFile /run/sshd.pid
# Путь до PID файла FreeBSD
#PidFile /var/run/sshd.pid
# Количество одновременных неавторизованных соединений
#MaxStartups 10:30:100
# Допустить использование перенаправления для устройств tun
#PermitTunnel no
# Выполнить chroot после авторизации. По умолчанию не выполнять.
#ChrootDirectory none
# Только FreeBSD. Отправить сообщение об успешной аутентификации и сообщения об ошибках демону blacklistd
#UseBlacklist no
# Указать дополнительный текст к сообщению SSH. По умолчанию во FreeBSD: FreeBSD-20230316
#VersionAddendum none
# Показать текст из файла до авторизации (путь до файла с текстом)
#Banner none
# Далее все относится к sftp (подробнее в статье по настройки SFTP)
# override default of no subsystems (Debian [linux])
Subsystem sftp /usr/lib/openssh/sftp-server
# override default of no subsystems (Freebsd)
#Subsystem sftp /usr/libexec/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Вносим необходимые изменения, сохраняем файл.
Перезапускаем SSH server в Linux
systemctl restart ssh
Перезапускаем SSH server в FreeBSD
service sshd restart
Настройка OpenSSH завершена, проверим подключение к серверу.
3. Подключение к SSH серверу
Для подключения нужно знать адрес сервера (IP адрес) и порт (если менялся, по умолчанию 22).
3.1. Подключаемся из Linux / FreeBSD через OpenSSH
Используем OpenSSH клиент который уже установлен в системе по умолчанию. Пишем в консоли строку вида:
ssh root@80.95.110.25 -p 22
ssh - OpenSSH клиент, root - логин пользователя под которым заходим, 80.95.110.25 - адрес сервера (IP адрес), -p 22 - указываем порт сервера (если порт 22 можно опустить этот параметр).
На вопрос: Are you sure you want to continue connecting (yes/no/[fingerprint])?, отвечаем yes
Шифрованное соединение установлено, вводить пароль от учетной записи под которой заходим (в моем случае это root).
Все, соединение с SSH сервером установлено.
3.2. Подключаемся из Windows через OpenSSH
Установка соединение с OpenSSH сервером
Начиная с Windows 10 версии 1803, OpenSSH установлен по умолчанию. Можно подключатся через консоль (CMD или PowerShell), используя строчку для подключения аналогичную как в Linux / FreeBSD (см. подробнее в разделе выше).
ssh root@80.95.110.25 -p 22
Если выводится сообщение: Имя "ssh" не распознано как имя командлета, функции, файла сценария или выполняемой программы… Нужно установить OpenSSH клиент.
Устанавливаем OpenSSH клиент Windows
В Windows 10 запускаем от администратора PowerShell и используем команду для проверки доступности ssh-клиента
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'
Устанавливаем доступную версию OpenSSH.Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Если через данные метод не получилось установить, значит используется устаревшая версия Windows 10 или старая Windows (Windows XP, Windows 7, Windows 8).
На старых Windows необходимо скачать вручную OpenSSH-клиент необходимой версии: https://github.com/PowerShell/Win32-OpenSSH и установить.
3.3. Подключаемся с телефона (Android) через ConnectBot
Устанавливаем приложение ConnectBot из F-Droid или Google Play. Можно просто скачать в виде APK последнею версию https://f-droid.org/ru/packages/org.connectbot/
Запускаем и добавляем новый сервер
Протокол: ssh
Имя пользователя: root (логин пользователя под которым заходим)
Сервер: 80.95.110.25 (IP адрес сервера, указываем свой)
Порт: 22 (порт сервера)
Псевдоним: SSH сервер (название для подключения).
Подключаем к SSH серверу. На вопрос “Хотите продолжить попытки соединения?” отвечаем “ДА” (Подтверждаем доверие ключу) и вводим пароль от учетной записи.