notby.NET Logo

Настройка 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
Debian Console, команда "systemctl status ssh". OpenSSH сервер есть в автозагрузке и работает.

Если параметр Loaded в статусе disabled, значит ssh.service нет в автозагрузке.

Добавляем в автозагрузку

systemctl enable ssh

Запускаем SSH сервер

systemctl start ssh
Debian Console, команды "systemctl enable ssh", "systemctl start ssh". Добавление OpenSSH сервера в автозагрузку и его запуск.

1.2. Добавляем SSH сервер в загрузку FreeBSD

Открываем файл /etc/rc.conf и добавляем sshd_enable="YES" строку.

nano /etc/rc.conf
sshd_enable="YES"
Добавление автозагрузки SSH сервера (sshd_enable="YES) в файл /etc/rc.conf (FreeBSD)

Запускаем 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-серверу через консольный SSH-клиент. подтверждается ключ сервера, вводится пароль. Подключение к серверу установлено.

Все, соединение с SSH сервером установлено.

3.2. Подключаемся из Windows через OpenSSH

Установка соединение с OpenSSH сервером

Начиная с Windows 10 версии 1803, OpenSSH установлен по умолчанию. Можно подключатся через консоль (CMD или PowerShell), используя строчку для подключения аналогичную как в Linux / FreeBSD (см. подробнее в разделе выше).

ssh root@80.95.110.25 -p 22
Windows 10 подключение к SSH-серверу через консольный openSSH-клиент. подтверждается ключ сервера, вводится пароль. Подключение к серверу установлено.

Если выводится сообщение: Имя "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 через PowerShell устанавливается OpenSSH клиента

Если через данные метод не получилось установить, значит используется устаревшая версия 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 сервера в ConnectBot. Заполнение необходимых параметров.

Протокол: ssh
Имя пользователя: root (логин пользователя под которым заходим)
Сервер: 80.95.110.25 (IP адрес сервера, указываем свой)
Порт: 22 (порт сервера)
Псевдоним: SSH сервер (название для подключения).

Подключаем к SSH серверу. На вопрос “Хотите продолжить попытки соединения?” отвечаем “ДА” (Подтверждаем доверие ключу) и вводим пароль от учетной записи.

Успешное подключение к SSH сервера через ConnectBot