Подобное сообщение появляется если попытаться залогиниться под пользователям, для которого был установлен альтернативный shell, который был впоследствии удалён. Самый эпик фейл, если этим пользователем является root.
su
Password:
su: failed to execute /usr/bin/zsh: No such file or directory
Но ничего страшного, выход есть! Чтобы поменять оболочку для рута не имея доступа к аккаунту придётся загрузиться с LiveCD и вручную поправить файл /etc/passwd.
Если прямого доступа к серверу нет, то тоже ничего страшного. Большинство нормальных хостеров предлагают консоль для восстановления. У нормальных хостеров её можно включить автоматически и бесплатно. Из недостатков данного метода — простой сервера во время восстановления, Но займёт он не более 5 минут.
Для простоты я будут использовать термин LiveCD, хотя никакого CD в данном случае не существует. У Hetzner Resue система работает так: после активации системы спасения на нашем DHCP-сервере будет создан файл конфигурации. При следующей перезагрузке ваш сервер будет загружаться из сети, и с нашего TFTP-сервера будет загружена минимальная операционная система. Тогда вы сможете использовать спасательную систему столько, сколько захотите. Заказ на спасательную систему будет активен в течение 60 минут. Если вы перезагрузите сервер, будет запущена обычная установленная система.
Для Hetzner нужно зайти в панель robot, Выбрать сервер, затем вкладку Rescue. Выбрать операционную систему для LiveCD и её архитектуру, для CentOS 7 подойдёт Linux 64. Затем нажать кнопку Activare resque system, после чего появится сообщения с подобным содержимым:
After the next reboot your server will boot from the rescue system.
Then you can access your server, using the user name "root" and the following password: xdpxbqaUR7c2Bj
Нужно запомнить пароль для LiveCD системы. Затем нужно перейти в о вкладку Reset, выбрать пункт Execute an automatic hardware reset и нажать кнопку Send. Всё, теперь нужно заново подключиться к серверу по ssh под логином и паролем указанным в сообщении из прошлого шага. Теперь самое интересное, нужно примонтировать физические диски в LiveCD образ. Подробнее можно почитать в документации Hetzner. В моём случае был софтварный RAID, для начала нужно получить список разделов:
ls /dev/md*
В моём случае найдены:
/dev/md0 /dev/md1 /dev/md2 /dev/md3
Далее нужно примонировать корневой раздел в любую директорию, например в стандартную /mnt:
mount /dev/md2 /mnt
Скорее всего и у вас корневой раздел будет /dev/md2.
Теперь нужно отредактировать файл /etc/passwd:
nano /etc/passwd
Если файл не найден, значит примонтировать не правильный раздел. Сначала нужно отмонтировать текущий:
umount /mnt
А затем примонтировать следующий, до тех пор, пока не будет найден корневой.
Теперь нужно поменять первую строчку с:
root:x:0:0:root:/root:/usr/bin/zsh
На:
root:x:0:0:root:/root:/bin/bash
Сохранить, выйти и сделать reboot.
Ссылки
- https://wiki.hetzner.de/index.php/Hetzner_Rescue-System/ru