Домой How To Как восстановить доступ к SSH, если случайно «сломали» ssh сервер

Как восстановить доступ к SSH, если случайно «сломали» ssh сервер

0
378
При настройке ssh сервера возможна ситуация, при которой новый конфиг не взлетел (например при настройке sftp), текущая сессия потеряна, при этом, хостинг-провайдер не предоставляет KVM или VNC доступ к серверу, панели управления нет, но есть доступ к терминалу через web (например сайт на WordPress и плагин WP-Term). Что делать?

Для начала нужно понимать начальные условия. У меня они были следующими:

  1. Наличие WordPress на VPS c админкой
  2. PHP-FPM работающий под юзером www-data
  3. Наличие пользователя на VDS в группе sudoers
  4. FTP доступ ко всей файловой системе (не критично, можно и без этого)
  5. Неверно настроенный sshd не позволяющий принимать входящие подключения (connection refused).

Что будем делать?

Первым делом определите свои начальные условия, мои нарисовали такой план:

  1. Получить доступ к терминалу любым наиболее простым способом.
  2. Получить доступ к пользователю, имеющим доступ к sudoers.
  3. Получить доступ к руту, сделать chmod 777 на /etc/ssh/sshd_config.
  4. Зайти по FTP и исправить ошибку в конфиге SSH-сервера.
  5. Перезагрузить сервис или сервер для восстановления доступа к управлению сервером.

Поехали

Поскольку у меня был доступ к админке WordPress, я установил плагин WPTerm для получения доступа к терминалу. Если есть доступ к файлам сайта, можно залить любой php shell, работать будет.

Убедимся, что для команды su система попросит зайти в «нормальный» терминал, а не оболочку от php exec:

Какое решение? Правильно, завернуть нашу команду в script, чтобы получить доступ к нашему пользователю, затем доступ к root и изменить права на нужный файл, чтобы после исправить конфиг по ftp. Немного подумав, получаем следующую команду спасения сервера:


$ sh -c "sleep 1; echo pass" | script -c 'su -c "echo pass | sudo -S -k chmod 777 /etc/ssh/sshd_config" - sudouser' | tail -n +2

pass — пароль пользователя входящего в sudoers,
sudouser — логин пользователя входящего в sudoers

Проверим, что показывает whoami:

Получилось, whoami показывает, что мы успешно залогинились как root. Далее заходим по FTP, меняем конфиг и после презагрузки sshd не забываем вернуть начальные права доступа к файлу.

Заключение

Таким образом, зная логин и пароль пользователя из группы sudoers и имея доступ к выполнению php exec, можно выполнить любую команду от привилегированного пользователя.