Глиф Учебники

Вход root по SSH

Справочник · Ubuntu · 4 минуты чтения

По умолчанию в Ubuntu войти по SSH под root с паролем нельзя, и так задумано. У root нет пароля вовсе, а сервер SSH пускает root только по ключу (настройка PermitRootLogin prohibit-password). Обычно root и не нужен: войдите своим пользователем и станьте root командой sudo.

Без входа под root — так безопаснее

Bash
ssh ivan@192.168.1.10
sudo -i

sudo -i открывает оболочку root после ввода пароля вашего пользователя. Выход — exit. Для одной команды хватит sudo перед ней: sudo apt update. Каждая такая команда записывается в журнал системы, и видно, кто что делал.

Root по ключу

Если вход именно под root нужен (например, для программы резервного копирования), пустите root по ключу — пароль для этого не нужен, а настройку по умолчанию менять не придётся. Положите открытый ключ в /root/.ssh/authorized_keys:

Bash
sudo mkdir -p /root/.ssh
sudo nano /root/.ssh/authorized_keys
sudo chmod 700 /root/.ssh
sudo chmod 600 /root/.ssh/authorized_keys

Файла authorized_keys у root обычно нет — nano создаст его при сохранении. В открывшийся файл вставьте строку открытого ключа (файл ~/.ssh/id_ed25519.pub на вашем компьютере, как его создать — в уроке SSH — удалённый доступ к серверу). Проверьте: ssh root@192.168.1.10.

Root по паролю

Серверы с открытым портом 22 круглосуточно перебирают боты, и первым делом — пароли root. Вход root по паролю включайте только в своей сети, с длинным паролем и ненадолго. Надёжнее — ключ.

Задайте root пароль:

Bash
sudo passwd root

Теперь вход root с паролем нужно разрешить в настройках сервера SSH. Главный файл настроек — /etc/ssh/sshd_config. В Ubuntu 20.04 и новее в его начале стоит строка Include /etc/ssh/sshd_config.d/*.conf: сервер читает и все файлы .conf из папки /etc/ssh/sshd_config.d/. Свои настройки удобнее положить туда отдельным файлом — главный файл остаётся нетронутым, а вернуть как было — значит удалить один файл. Проверьте, есть ли такая строка:

Терминал
$ grep -n Include /etc/ssh/sshd_config
12:Include /etc/ssh/sshd_config.d/*.conf

Строка естьсоздайте свой файл в папке

Файла 10-root.conf в системе нет, так и должно быть: nano откроет пустой файл (внизу надпись «New File» или «Новый файл») и создаст его при сохранении.

Bash
sudo nano /etc/ssh/sshd_config.d/10-root.conf

Впишите две строки, сохраните — Ctrl+O, затем Enter — и выйдите: Ctrl+X.

10-root.conf
PermitRootLogin yes
PasswordAuthentication yes

Хочется править главный файл? Можно, но учтите: строка Include стоит в его начале, поэтому файлы папки читаются раньше, а в настройках SSH действует первое найденное значение. Если в папке лежит, например, 50-cloud-init.conf (его пишет cloud-init — настройщик облачных серверов) со строкой PasswordAuthentication, правка той же настройки в главном файле ничего не изменит.

Дальше: «Проверка и перезапуск»

Строки нетправьте главный файл

grep ничего не вывел (или nano пишет, что папки /etc/ssh/sshd_config.d нет) — значит, Ubuntu старше 20.04 либо главный файл остался от прежней версии системы: при обновлении на вопрос о sshd_config выбрали «оставить свою версию». Такой сервер файлы папки не читает, и настройки правят в самом главном файле:

Bash
sudo nano /etc/ssh/sshd_config

Найдите строки #PermitRootLogin prohibit-password и #PasswordAuthentication yes (поиск в nano — Ctrl+W), уберите # в начале и поставьте нужные значения:

Настройки
PermitRootLogin yes
PasswordAuthentication yes

Строка с # в начале — комментарий: сервер её не читает и берёт значение по умолчанию.

Проверка и перезапуск

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

Bash
sudo sshd -t
sudo systemctl restart ssh

Какие значения действуют на самом деле, показывает sshd -T — с учётом всех файлов настроек:

Bash
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'

Должно быть permitrootlogin yes и passwordauthentication yes. Если там другое — то же значение задано раньше вашего (действует первое найденное): посмотрите ls /etc/ssh/sshd_config.d/. Есть файл, который идёт по алфавиту раньше 10-root.conf, — назовите свой так, чтобы он шёл первым (например, 05-root.conf). Правили главный файл — его перебивает файл из папки: положите настройки своим файлом в папку, как описано выше.

Как вернуть как было

Заблокируйте пароль root — вход с паролем закроется, sudo будет работать как прежде:

Bash
sudo passwd -l root

Создавали свой файлудалите его

Bash
sudo rm /etc/ssh/sshd_config.d/10-root.conf

Правили главный файлверните строки

Откройте /etc/ssh/sshd_config и верните прежний вид двух строк: #PermitRootLogin prohibit-password и #PasswordAuthentication yes.

Затем перезапустите сервер: sudo systemctl restart ssh.

Если не пускает