Пароля root нет, есть только чужой ключ: как вернуть себе сервер
Сервер достался вам без единого пароля — только приватный SSH-ключ, оставшийся от прежнего администратора. Root-пароль никто не знает, а в панель хостинга либо вообще нет входа, либо там нет консоли или rescue-режима. Это узкая, но частая ситуация: не «разберитесь в целом с наследством», а конкретная техническая задача — как через один-единственный ключ, который в любой момент может перестать работать, безопасно завести себе независимый доступ и забрать сервер под полный контроль, ничего при этом не сломав.
Содержание
- Сначала: не потеряйте единственный работающий вход
- Что вообще позволяет этот ключ: sudo, root или ограниченный шелл
- Создаём себе независимый доступ, не трогая чужой ключ
- Проверяем новый доступ в отдельном окне, прежде чем что-то менять дальше
- Отзываем чужой ключ: без спешки и без сюрпризов
- Если хостинг не даёт rescue-доступ или консоль
Сначала: не потеряйте единственный работающий вход
Пока новый доступ не подтверждён, этот ключ — единственная дверь на сервер. Прежде чем что-либо менять, соблюдите несколько правил, которые звучат banально, но именно на них чаще всего теряют доступ:
- Не закрывайте текущую SSH-сессию, пока не открыли и не проверили вторую, независимую. Разорванное соединение из-за обрыва сети — обычное дело, и если параллельно вы уже что-то сломали в конфигурации SSH, обратно вы не зайдёте.
- Работайте в
tmuxилиscreen, если есть такая возможность — сессия переживёт обрыв сети на вашей стороне, и вы сможете переподключиться к тому же процессу, а не начинать заново. - Снимите резервные копии всего, что собираетесь менять, прежде чем трогать:
cp -a ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak-$(date +%Y%m%d)
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak-$(date +%Y%m%d)
sudo cp -a /etc/sudoers /etc/sudoers.bak-$(date +%Y%m%d) 2>/dev/null
- Скачайте копии этих файлов и себе на локальную машину (
scp) — если сервер вдруг станет недоступен целиком, у вас останется хотя бы снимок конфигурации на момент, когда вы ещё могли зайти. - Не трогайте firewall и правила SSH («на всякий случай ограничу порт», «закрою пароль по SSH») до того, как заведёте себе проверенный запасной вход. Каждое такое изменение — ещё один способ случайно захлопнуть дверь самому себе.
Если ключ, которым вы пользуетесь, — это ключ, физически переданный вам увольняющимся или уже уволившимся человеком, и отношения напряжённые, держите в уме, что он теоретически может быть отозван или изменён с другой стороны в любой момент — если у прежнего админа осталась возможность зайти в панель хостинга или ещё один параллельный доступ. Это ещё один аргумент действовать быстро, но аккуратно, а не медленно и по одному шагу в день.
Что вообще позволяет этот ключ: sudo, root или ограниченный шелл
Прежде чем строить план, честно проверьте, что именно даёт вам этот ключ — от этого зависит, какой путь вообще возможен.
whoami
id
groups
cat ~/.ssh/authorized_keys # посмотрите, нет ли ограничений на саму запись ключа
Обратите внимание на саму строку в authorized_keys, под которой вы зашли — если перед ключом стоит command="...", no-pty или restrict, вы получаете не полноценный интерактивный шелл, а строго ограниченный набор действий (иногда — единственную разрешённую команду). В этом случае дальнейшие шаги этой статьи могут быть просто невозможны через данный ключ, и путь только один — через хостинг-провайдера.
Если шелл интерактивный, проверьте права:
sudo -l # покажет, что разрешено, даже если выполнить сразу не получится
sudo -n true && echo "sudo без пароля работает"
| Что показал ключ | Что это значит | Куда двигаться дальше |
|---|---|---|
Вход сразу под root | Полный доступ, но единственная точка входа | Всё равно сразу создать отдельного sudo-пользователя — раздел ниже |
Вход под пользователем, sudo -l показывает NOPASSWD: ALL | Можно управлять сервером как root, не зная root-пароль | Прямой путь — раздел про создание нового пользователя |
| Вход под пользователем с sudo, но требуется пароль этого пользователя | Пароль вы не знаете, sudo останавливает | Смотрите ниже — можно попробовать через хостинг сбросить именно пароль этого пользователя, не root |
| Вход под обычным пользователем без sudo вообще | Через этот вход путь к root закрыт технически | Единственный путь — rescue-доступ или сброс пароля через хостинг, раздел ниже |
В authorized_keys стоит command="..." | Интерактивного шелла нет вовсе | Смотрите, что разрешает команда; чаще всего это тупик для ручных действий |
Если попали в третий случай — sudo просит пароль, которого у вас нет, — не пытайтесь его подбирать или искать способ обойти проверку: это ничего не даст технически корректно и создаёт лишний риск, если сервер вообще-то принадлежит компании, а не лично вам. Правильный путь такой же, как при полном отсутствии root-пароля — через провайдера, см. предпоследний раздел.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверСоздаём себе независимый доступ, не трогая чужой ключ
Если ключ даёт root или sudo без пароля — не спешите менять root-пароль или отзывать чужой ключ первым делом. Сначала закрепитесь: заведите себе полностью отдельную учётную запись с собственным новым SSH-ключом, оставив старый вход нетронутым как страховку.
Сгенерируйте новую пару ключей у себя локально — не переиспользуйте старые ключи, которые могли где-то засветиться:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_server-recovery -C "recovery-key-$(date +%Y%m%d)"
На сервере (из уже открытой сессии) создайте нового пользователя и выдайте ему sudo:
# Debian/Ubuntu
sudo adduser newadmin
sudo usermod -aG sudo newadmin
# RHEL/CentOS/Rocky/AlmaLinux
sudo useradd -m -s /bin/bash newadmin
sudo passwd newadmin
sudo usermod -aG wheel newadmin
Проверьте, что группа действительно даёт права в /etc/sudoers, а не осталась только формальностью:
sudo grep -E "^%sudo|^%wheel" /etc/sudoers
ls -la /etc/sudoers.d/
Пропишите ваш новый публичный ключ этому пользователю:
sudo mkdir -p /home/newadmin/.ssh
sudo cp ~/.ssh/id_ed25519_server-recovery.pub /home/newadmin/.ssh/authorized_keys
sudo chown -R newadmin:newadmin /home/newadmin/.ssh
sudo chmod 700 /home/newadmin/.ssh
sudo chmod 600 /home/newadmin/.ssh/authorized_keys
Пароль на новую учётку тоже стоит задать (sudo passwd newadmin) — как запасной вариант входа через консоль хостинга, если SSH вдруг откажет целиком, но не как основной способ входа: полагайтесь на ключ.
Проверяем новый доступ в отдельном окне, прежде чем что-то менять дальше
Это самый важный шаг всей процедуры, и его нельзя пропускать ради экономии времени. Откройте второе, независимое окно терминала — не разрывая первую сессию — и зайдите под новым пользователем и новым ключом:
ssh -i ~/.ssh/id_ed25519_server-recovery newadmin@ваш-сервер
sudo -i
id # должно показать uid=0(root)
Только когда вторая сессия подтверждённо работает и sudo -i реально даёт root — можно двигаться дальше. Если что-то пошло не так, у вас всё ещё есть первая, рабочая сессия, чтобы это исправить.
Частая причина, почему новый вход не срабатывает, даже если всё сделано правильно, — ограничения в sshd_config:
grep -E "^AllowUsers|^AllowGroups|^DenyUsers|^DenyGroups" /etc/ssh/sshd_config
Если там явно перечислены конкретные логины, добавьте туда newadmin, проверьте синтаксис перед перезапуском и перезагрузите службу мягко, не разрывая существующие соединения:
sudo sshd -t && sudo systemctl reload ssh # или sshd — имя службы зависит от дистрибутива
reload не разрывает уже установленные TCP-сессии, в отличие от резких вмешательств в firewall — это важно, если у вас в этот момент открыта единственная рабочая сессия.
Отзываем чужой ключ: без спешки и без сюрпризов
Только после того, как новый доступ проверен во втором окне и вы вошли под ним и получили root независимо от старого ключа, имеет смысл заниматься отзывом чужого доступа. Делайте это спокойно — бэкап уже снят на первом шаге, откатиться можно в любой момент.
Удаляйте не файл целиком, а конкретную строку — это снижает риск случайно стереть что-то ещё:
ssh-keygen -lf ~/.ssh/authorized_keys # покажет отпечаток каждого ключа в файле построчно
grep -v "конкретный-отпечаток-или-фрагмент-ключа" ~/.ssh/authorized_keys.bak-* > ~/.ssh/authorized_keys
Проверьте все места, где ключ мог быть прописан ещё раз, а не только в одном файле:
authorized_keysу root, если вход по нему тоже возможен:/root/.ssh/authorized_keys.- Нестандартный путь, если он задан отдельно:
grep AuthorizedKeysFile /etc/ssh/sshd_config. AuthorizedKeysCommand— если ключи подтягиваются не из файла, а внешним скриптом (метаданные облака, LDAP, корпоративный сервис ключей), отзывать нужно на стороне источника, а не в файле на сервере — иначе ключ вернётся при следующей синхронизации.- Ключи в
authorized_keysдругих пользователей с shell-доступом — не только у того, чей ключ вы уже нашли:for u in $(awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd); do echo "== $u =="; sudo cat /home/$u/.ssh/authorized_keys 2>/dev/null; done.
Прежде чем удалять учётную запись прежнего администратора целиком, проверьте, не завязана ли на неё автоматизация — иначе отзыв ключа сломает что-то незаметно и всплывёт только через день-два:
crontab -u старый_логин -l 2>/dev/null
sudo systemctl list-units | grep -i старый_логин
ps aux | grep старый_логин
Если зависимостей не нашлось — на первом этапе безопаснее заблокировать учётную запись, а не удалять её сразу: sudo passwd -l старый_логин и sudo usermod -s /usr/sbin/nologin старый_логин. Удаление можно сделать позже, когда точно убедитесь, что ничего не сломалось. Параллельно поменяйте root-пароль на новый, даже если вы вошли через sudo, а не напрямую под root — если старый пароль вообще существовал и был кому-то известен, лучше не полагаться на то, что им никто не воспользуется.
Если хостинг не даёт rescue-доступ или консоль
Если ключ ведёт в тупик (обычный пользователь без sudo, или в authorized_keys стоит принудительная команда) — план из предыдущих разделов через SSH не сработает, и остаётся путь через провайдера. Но не у всех хостингов вообще есть встроенная консоль или rescue-режим, особенно у бюджетных VPS-тарифов, где такая функция может быть платной опцией, не включённой по умолчанию, либо отсутствовать в панели вовсе.
Порядок действий по убыванию простоты:
- Спросите поддержку напрямую про сброс пароля root на их стороне. У многих провайдеров это можно сделать без консоли и без rescue-режима вообще — техподдержка сбрасывает пароль на сервере программно и присылает новый через панель или защищённым каналом. Это стоит попробовать в первую очередь, прежде чем разбираться с rescue.
- Спросите про включение консоли/rescue как отдельной опции. Если по тарифу она не активна, часто её можно включить по запросу — иногда платно, иногда бесплатно, это зависит от провайдера и не стоит выдумывать заранее, во сколько это обойдётся именно у вас.
- Если провайдер поддерживает снапшоты диска и создание нового сервера из снапшота — попросите снять снимок текущего диска и примонтировать его как дополнительный том к новому, временному серверу. Это позволяет отредактировать файлы (сбросить пароль через
chroot, прочитатьauthorized_keys) оффлайн, вообще не завися от того, отвечает ли на команды исходный сервер. - Если ничего из этого недоступно, единственный формальный путь — обращение в поддержку с подтверждением, что аккаунт принадлежит вам: счета об оплате, реквизиты, привязанная карта. Это медленнее и не гарантирует сроков, но это единственный легитимный путь, если технических альтернатив нет. Более широкий разбор именно этой процедуры и того, что провайдеры обычно принимают как подтверждение владения, — в статье «Админ ушёл со всеми паролями: план возврата контроля», там же — пошаговая механика сброса root-пароля через VNC/IPMI, если консоль всё же появится. Сама процедура
chrootи монтирования диска для сброса пароля root подробно разобрана в статье «Сброс пароля root на VPS».
Пока идёт переписка с поддержкой, берегите ключ, который у вас уже есть, как единственный рабочий канал — не экспериментируйте с ним, не пытайтесь через него менять конфигурацию SSH или firewall, чтобы не потерять и его тоже. Если параллельно у вас остаётся доступ хотя бы к части данных (файлы через SFTP, дамп базы, если он есть) — снимите резервную копию того, что критично, на случай, если восстановление через провайдера затянется и придётся поднимать сервис заново на новой машине.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Ключ даёт вход только под обычным пользователем без sudo — что делать?
Через этот вход путь к root закрыт технически, дальше пытаться бесполезно. Единственный рабочий путь — попросить хостинг-провайдера сбросить root-пароль на их стороне или дать rescue-доступ, см. предыдущий раздел.
Можно ли просто добавить свой ключ в ту же учётную запись, не заводя нового пользователя?
Как экстренная временная мера — можно, это быстрее и снижает риск потерять доступ прямо сейчас. Но отдельного пользователя с собственным именем и sudo стоит завести следом же — это даёт понятный аудит-след («кто заходил и когда») и не смешивает ваш постоянный доступ с учётной записью, которую вы, скорее всего, со временем заблокируете.
Нужно ли сразу менять root-пароль, как только получилось зайти под sudo?
Да, но только после того, как второй, независимый способ входа подтверждённо работает. Если root-пароль вообще существует и когда-то был кому-то известен, полагаться на то, что им не воспользуются, не стоит — но менять его раньше, чем закреплён запасной путь, рискованно.
Что если единственный рабочий ключ вдруг перестал пускать раньше, чем я успел закрепиться?
Первым делом — тикет в поддержку хостинга с просьбой сбросить пароль root программно, без консоли; это часто быстрее, чем ожидание rescue-доступа. Если не помогает — переходите к пункту про снапшот диска или монтирование его к новому серверу, если провайдер это поддерживает.
Стоит ли удалять учётную запись прежнего администратора сразу после отзыва ключа?
Не сразу. Сначала проверьте cron, systemd-таймеры и запущенные процессы на предмет того, что может быть завязано на эту учётную запись — деплой-скрипт, служебный процесс. Безопаснее сначала заблокировать вход (passwd -l, shell на nologin), а удалять запись через некоторое время, когда убедитесь, что ничего не сломалось.
В authorized_keys несколько ключей, и непонятно, какой из них чей — как быть?
Сопоставить конкретный ключ с конкретным человеком по одному файлу нельзя — можно только увидеть отпечаток (ssh-keygen -lf) и комментарий после ключа, если он информативен. Если ключей больше, чем известных вам людей с доступом, это повод не удалять их вслепую, а сначала выяснить у коллег, кто ещё мог иметь доступ, прежде чем что-то отзывать.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →