Настройка SSH сервера

Общие сведения по настройке SSH сервера

Статья включает:

Запуск сервера
Настройка доступа по ключам (без ввода пароля)
Устранение неполадок

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

В первую очередь необходимо сгенерировать RSA и DSA ключи:

# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' Generating public/private rsa key pair. Your identification has been saved in /etc/ssh/ssh_host_rsa_key. Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub. The key fingerprint is: 55:1c:1e:33:7d:2e:17:8c:44:90:ea:f6:22:83:37:94 root@localhost The key's randomart image is: +--[ RSA 2048]----+ | o@=o | | +.=.o.| | o . o.| | o . o| | S o | | E o | | o . . | | . = . . | | . + . | +-----------------+

# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' Generating public/private dsa key pair. Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: eb:f7:9d:bf:57:63:e3:82:e3:a0:6f:9c:02:a3:21:73 root@localhost The key's randomart image is: +--[ DSA 1024]----+ | | | | | | | | | S | | o E o . +.| | + o o o.. . o +| | . o.+oo o o.| | .=o.oo +o+| +-----------------+

После этого необходимо установить корректные права доступа на каталог /var/chroot/sshd:

chmod 755 /var/chroot/sshd

Права доступа на публичные и личные RSA и DSA ключи ssh-keygen выставляет самостоятельно.


Caution: Запускать SSH-сервер следует только по абсолютному пути: /usr/sbin/sshd.

Для успешного запуска SSH-сервера требуется наличие запущенного менеджера random. Убедиться в этом можно путем проверки наличия файла устройства /dev/random. Таким образом, запуск сервера из скрипта /etc/rc.d/rc.local может выглядеть следующим образом:

random & waitfor /dev/random 5 /usr/sbin/sshd &


Caution: random к этому моменту не должен быть запущен.


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

while ! dd if=/dev/urandom bs=1 count=1 of=/dev/null 2>/dev/null; do :; done

или

( while ! read -r -d '' -n 1 var < /dev/random; do :; done ) 2> /dev/null



Caution: Учетная запись, которая будет использоваться для входа в систему по протоколу SSH, должен иметь пароль. SSH-сервер не разрешает использование пустых паролей. Для его установки следует воспользоваться утилитой passwd.

Более детальная информация может быть найдена на страницах sshd.

Настройка доступа по ключам (без ввода пароля)

Настройка на стороне сервера

В файле /etc/ssh/sshd_config следует раскомментировать опции PubkeyAuthentication и AuthorizedKeysFile:

#RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys

Если требуется вход в систему от имени пользователя root, то раскомментировать опцию PermitRootLogin:

# Authentication: LoginGraceTime 600 PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10

После этого обязательно необходимо перезапустить процесс SSH-сервера.

Настройка SSH-клиента в UNIX-подобной ОС

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

# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: d1:d2:fb:ce:7a:31:84:5f:35:57:62:9e:4f:5f:48:58 las@calculate The key's randomart image is: +--[ RSA 2048]----+ | oE o| | o .+ =o| | o o. +.=| | o... .oo| | S .o . o| | .+ | | .o | | o. | | .oo | +-----------------+

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

$ scp ~/.ssh/id_rsa.pub root@192.168.0.2:~/id_rsa_client.pub root@192.168.0.2's password: id_rsa.pub 100% 395 0.4KB/s 00:00

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

$ ssh root@192.168.0.2 The authenticity of host '192.168.0.2 (192.168.0.2)' can't be established. RSA key fingerprint is SHA256:CQFTHfnyGszGy6EXmJwEifeN5pYn1rr73xf3J0jrBNw. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.2' (RSA) to the list of known hosts. root@192.168.0.2's password: Добро пожаловать в ЗОСРВ "Нейтрино"! Выполнен вход в систему: 20:34:29 09.10.2022 на /dev/ttyp0 Предыдущий вход в систему: 20:34:10 09.10.2022 на /dev/ttyp0 # # # mkdir ~/.ssh # chmod 700 ~/.ssh # # cat ~/id_rsa_client.pub >> ~/.ssh/authorized_keys # chmod 600 ~/.ssh/authorized_keys # rm ~/id_rsa_client.pub

Передачу ключа и его добавление в список доверенных можно выполнить и другими способами:

$ ssh-copy-id root@192.168.0.2

или

$ cat ~/.ssh/id_rsa.pub | ssh root@192.168.0.2 \ 'umask 0077 && mkdir -p ~/.ssh && cat - >> ~/.ssh/authorized_keys'

В заключении следует проверить подключение к серверу и отсутствие необходимости ввода пароля:

$ ssh root@192.168.0.2 Добро пожаловать в ЗОСРВ "Нейтрино"! Выполнен вход в систему: 20:34:29 09.10.2022 на /dev/ttyp0 Предыдущий вход в систему: 20:34:10 09.10.2022 на /dev/ttyp0 # #

Более детальная информация может быть найдена на страницах sshd, /etc/ssh/sshd_config и ~/.ssh/ssh_config.

Устранение неполадок

Сообщения об ошибках на стороне клиента

Unable to negotiate with ...: no matching host key type found. Their offer: ssh-rsa
Unable to negotiate with ...: no matching host key type found. Their offer: ssh-dss
На стороне клиента нужно в файл конфигурации SSH-клиента добавить строки вида:
Host 192.168.0.2 HostKeyAlgorithms +ssh-dss PubkeyAcceptedKeyTypes +ssh-dss PubkeyAcceptedAlgorithms +ssh-dss
или (в зависимости от ошибки)
Host 192.168.0.2 HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa

Note: Местоположение пользовательских конфигурационных файлов SSH-клиента в зависимости от операционной системы:
  • Windows: файл"%USERPROFILE%"/.ssh/config (напр. C:\Users\user1\.ssh\config)
  • GNU/Linux: файл $HOME/.ssh/config (напр. /home/user1/.ssh/config) или /etc/ssh/ssh_config (общесистемный)

Также данные опции могут быть добавлены в конфигурационный файл без указания хостов, т.е. использоваться для всех подключений, либо переданы в качестве аргументов в режиме командной строки. Пример:
$ ssh -oPubkeyAcceptedKeyTypes=+ssh-rsa -oHostkeyAlgorithms=+ssh-rsa 192.168.0.2




Предыдущий раздел: перейти