Как изменить пароль root на VPS с Ubuntu
Пошагово измените пароль root или пользователя на VPS с Ubuntu с помощью passwd, chpasswd и chage. Проверьте вход и восстановите доступ при потере пароля или SSH.
Как изменить пароль root на VPS под управлением Ubuntu
Чтобы изменить пароль root на VPS (виртуальном частном сервере) под управлением Ubuntu, откройте сеанс SSH (защищённой оболочки) от имени пользователя, который может выполнить sudo, а затем выполните sudo passwd root. Команда дважды запрашивает новый пароль и не запрашивает старый, поскольку sudo уже подтвердил вашу личность. Чтобы изменить пароль собственной учётной записи, выполните passwd без аргументов. Сначала команда запросит текущий пароль.
passwd # your own password
sudo passwd deploy # another user's password
sudo passwd root # root's passwordЭто вся операция. Ниже описаны ситуации, в которых обычно возникают проблемы: проверка нового пароля до завершения сеанса, через который можно исправить ошибку, установка паролей из скрипта, принудительное истечение срока действия пароля и восстановление доступа, если пароль уже утрачен.
Откройте второй сеанс до изменения пароля
Сейчас откройте второй сеанс SSH и оставьте его подключенным. Почти любую ошибку в этом руководстве можно исправить за две минуты, пока остается активная аутентифицированная оболочка. После закрытия последнего сеанса потребуется доступ к консоли.
Уже открытая оболочка продолжает работать после изменения, блокировки или истечения срока действия учетной записи, которой она принадлежит, поскольку SSH проверяет учетные данные при входе и больше их не проверяет. Исключением является sudo. После истечения срока действия метки времени он повторно проверяет пароль через PAM (модули подключаемой аутентификации). По умолчанию это происходит через 15 минут после последнего запроса. Поэтому новый пароль впервые проходит полноценную проверку при следующем запросе sudo, а не при входе.
Проверьте новый пароль во втором сеансе, пока первый остается открытым.
Изменение собственного пароля с помощью passwd
passwdChanging password for deploy.
Current password:
New password:
Retype new password:
passwd: password updated successfullyТолько passwd: password updated successfully означает, что хеш в /etc/shadow был заменен. При любом другом результате старый пароль остается без изменений.
Здесь возникают две ошибки. passwd: Authentication token manipulation error с последующим passwd: password unchanged означает, что введен неправильный текущий пароль либо файловая система, содержащая /etc/shadow, недоступна для записи. В режиме восстановления это обычное состояние. You must choose a longer password. появляется из-за pam_unix в /etc/pam.d/common-password. Этот модуль проверяет длину и сходство пароля для обычных пользователей.
В большинстве образов VPS учетная запись по умолчанию (ubuntu или другое имя, заданное провайдером) вообще не имеет пароля, а использует только ключ SSH. У passwd нет текущего пароля для проверки, поэтому эта учетная запись не может пройти первый запрос. Вместо этого используйте sudo passwd $USER. Это работает, потому что файл drop-in для sudoers в образе разрешает этой учетной записи выполнять sudo без пароля.
Изменение пароля другого пользователя с помощью sudo passwd
sudo passwd deployУ root не запрашивается старый пароль, а pam_unix не выполняет проверки надежности, применяемые к обычным пользователям. Поэтому root может задать пароль, который пользователь не смог бы установить самостоятельно.
Блокировка — отдельное действие. sudo passwd -l deploy добавляет ! перед сохраненным хешем, поэтому ему не соответствует ни один пароль. sudo passwd -u deploy удаляет этот символ. Проверьте состояние с помощью sudo passwd -S deploy.
Блокировка пароля не запрещает пользователю входить в систему. Любой ключ в его ~/.ssh/authorized_keys по-прежнему работает, поскольку при аутентификации по открытому ключу файл /etc/shadow не проверяется. Чтобы полностью запретить использование учетной записи, установите срок ее действия:
sudo usermod --expiredate 1 deployСрок действия учетной записи устанавливается на дату в 1970 году, поэтому sshd отклоняет вход независимо от предоставленных учетных данных. Отмените это с помощью sudo usermod --expiredate '' deploy.
Не используйте passwd -d. Эта команда устанавливает пустой пароль, а не блокирует его. В старом выпуске, в стеке PAM которого по-прежнему используется nullok, пустой пароль может использовать любой пользователь.
Нужен ли root пароль на VPS?
В Ubuntu root заблокирован по умолчанию. /etc/shadow содержит ! вместо хеша, а sudo passwd -S root выводит строку, начинающуюся с root L. Войти в root по паролю невозможно, пока Вы не зададите пароль. Поэтому образ предоставляет пользователя с правами sudo. Используйте подход учётные записи пользователей с минимальными правами на VPS, а не работайте от имени root.
Пароль root даёт только одну возможность: вход через консоль провайдера. Эта консоль подключается к виртуальной машине ниже сетевого стека. Поэтому она продолжает работать, если конфигурация sshd нарушена или правило межсетевого экрана задано неправильно. Однако у этого есть и недостаток. Меню восстановления GRUB запрашивает пароль root, если для root задан пароль. Поэтому инструмент, который Вы использовали бы для сброса забытого пароля, теперь защищён этим же паролем.
Задание пароля root не разрешает вход root по SSH. В Ubuntu используется PermitRootLogin prohibit-password, то есть вход разрешён только по ключам. Проверьте фактическую конфигурацию сервера:
sudo sshd -T | grep -i permitrootloginsshd -T выводит действующую конфигурацию после обработки каждой строки Include. Поэтому это единственный достоверный способ проверить конфигурацию, если /etc/ssh/sshd_config.d/ содержит drop-in-файлы.
Установите пароль из скрипта с помощью chpasswd
passwd считывает данные из терминала, поэтому его нельзя использовать из скрипта. chpasswd считывает пары user:password из стандартного ввода, по одной паре в строке.
printf '%s:%s\n' 'deploy' "$NEW_PASSWORD" | sudo chpasswdЭто работает, но пароль в открытом виде попадает в историю оболочки и журналы CI (непрерывной интеграции). Сначала создайте его хеш:
HASH=$(openssl passwd -6)
printf '%s:%s\n' 'deploy' "$HASH" | sudo chpasswd -eopenssl passwd -6 дважды запрашивает пароль без отображения вводимых символов, а затем выводит хеш SHA-512 crypt, начинающийся с $6$. -e сообщает chpasswd, что второе поле уже содержит хеш, поэтому оно без изменений копируется в /etc/shadow. Такой хеш безопасно хранить в репозитории или переменной CI. Пароль в открытом виде не покидает компьютер, на котором вы его ввели.
Ubuntu 24.04 хеширует новые пароли с помощью yescrypt ($y$), когда их задаёт passwd, а openssl passwd -6 использует SHA-512. При входе проверяются оба формата, потому что libxcrypt поддерживает оба формата. Их можно использовать одновременно. openssl passwd -6 работает одинаково во всех выпусках Ubuntu LTS, в отличие от chpasswd -c YESCRYPT: более старая версия пакета shadow в 20.04 не распознаёт это имя метода.
Как проверить, что пароль действительно изменился?
Сначала проверьте метаданные, затем подтвердите изменение входом в систему.
sudo passwd -S deploydeploy P 08/01/2026 0 99999 7 -1Второе поле содержит состояние: P означает, что пароль можно использовать, L — что он заблокирован, а NP — что пароль отсутствует. Дата показывает, когда пароль изменили в последний раз, поэтому здесь должна быть указана сегодняшняя дата. Следующие числа — это параметры срока действия пароля, описанные ниже.
Самая безопасная проверка в работающей системе — выполнить sudo. Команда sudo -k удаляет сохраненную отметку времени, а sudo -v принудительно запрашивает пароль заново. Если новый пароль принят, значит, PAM его принял, а параметры текущего сеанса не изменились.
sudo -k && sudo -vЧтобы проверить другую учетную запись, выполните su - deploy из оболочки без привилегий. Не выполняйте sudo su - deploy: root не запрашивает пароль, поэтому такая проверка ничего не доказывает. При вводе неправильного пароля отображается su: Authentication failure.
Фактическая проверка — выполнить новый вход по SSH с ноутбука, оставив рабочий сеанс открытым:
ssh -o PubkeyAuthentication=no deploy@203.0.113.10Здесь Permission denied (publickey). означает, что сервер не предложил аутентификацию по паролю, поэтому никакое изменение пароля не позволит войти. Permission denied, please try again. означает, что сервер предложил аутентификацию по паролю, но отклонил введенное значение.
Принудительная смена пароля при следующем входе с помощью chage
sudo chage -d 0 deploy-d 0 устанавливает дату последнего изменения в начало эпохи, поэтому PAM считает пароль просроченным. При следующем интерактивном входе система запрашивает текущий пароль, затем новый пароль и только после этого предоставляет оболочку. sudo passwd -e deploy делает то же самое.
Используйте это только для учетных записей, которые выполняют интерактивный вход с паролем. Просроченный пароль также влияет на вход по ключу, поскольку sshd выполняет этап PAM account даже в том случае, если для аутентификации использовался ключ. Сценарий ssh deploy@203.0.113.10 'systemctl restart app' завершается с этой ошибкой:
Password change required but no TTY available.После этой строки ничего не выполняется, а задание сообщает только ненулевой код завершения.
Что означают поля срока действия пароля
sudo chage -l deployLast password change : Aug 01, 2026
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7Эти числа — поля с 4 по 8 в строке этого пользователя в /etc/shadow. Минимальный срок (chage -m) — это период, который пользователь должен выждать перед повторной сменой пароля. Это не позволяет сразу вернуться к старому паролю после принудительной смены. Максимальный срок (chage -M) — это период действия пароля. Срок предупреждения (chage -W) — это период, с которого при входе начинают выводиться предупреждения. Срок неактивности (chage -I) — это льготный период после истечения срока действия, по окончании которого пароль полностью перестаёт приниматься. Срок действия учётной записи (chage -E) — это фиксированная дата. Он не зависит от пароля.
sudo chage -M 90 -W 14 deployЗадавайте это значение только тогда, когда этого требует политика. NIST (Национальный институт стандартов и технологий США) с 2017 года не рекомендует регулярно задавать срок действия паролей, поскольку это заставляет пользователей создавать предсказуемые варианты одного пароля. Вместо этого рекомендуется принудительно менять пароль при наличии признаков компрометации. Длинный уникальный пароль, сохранённый в менеджере паролей, в сочетании с SSH по ключу надёжнее, чем цикл в 90 дней.
Что делать, если вы потеряли пароль root
Если любая учетная запись на сервере может выполнить sudo, восстанавливать ничего не нужно: sudo passwd root задает новый пароль. Сложный случай — когда ни один вход не работает.
Для всех описанных ниже действий нужна консоль провайдера. В большинстве панелей она указана как VNC (virtual network computing) или последовательная консоль. Она подключается к виртуальной машине ниже сетевого стека, поэтому настройки sshd и правила брандмауэра на нее не влияют.
- Перезагрузите сервер из панели и следите за консолью.
- Откройте меню GRUB. В облачных образах обычно задан параметр
GRUB_TIMEOUT=0. Поэтому при загрузке через BIOS удерживайтеShift, а при загрузке через UEFI сразу после начала перезагрузки несколько раз нажимайтеEsc. - Выберите
Advanced options for Ubuntu, затем запись, оканчивающуюся на(recovery mode), а затемrootв меню восстановления. - Сначала выполните
mount -o remount,rw /. В режиме восстановления корневая файловая система монтируется только для чтения. Поэтому без этой командыpasswdзавершается с ошибкойpasswd: Authentication token manipulation error, так как не может записать данные в/etc/shadow. - Выполните
passwd ubuntuдля нужной учетной записи, затем перезагрузите сервер из панели.
Если у root уже задан пароль и вы потеряли именно его, оболочка восстановления запросит этот пароль, и этот способ не подойдет. Вместо этого загрузите rescue-образ провайдера, затем смонтируйте настоящий диск и измените пароль в установленной системе.
lsblk
sudo mount /dev/vda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt passwd ubuntu
sudo umount -R /mntОпределите разметку разделов с помощью lsblk, а не копируйте /dev/vda1 с этой страницы. Корневой раздел — самый большой. В образе UEFI рядом с ним находится небольшой EFI-раздел, в котором вообще нет каталога /etc.
Что делать, если SSH перестал принимать пароль
Работайте из сеанса, который у вас еще открыт. Если сеансов не осталось, используйте консоль.
Permission denied, please try again. означает, что сервер предложил аутентификацию по паролю и отклонил введенное значение. Обычно причина заключается во включенном caps lock или в раскладке клавиатуры консоли, которая отличается от использованной при задании пароля.
Permission denied (publickey). означает, что сервер вообще не предложил аутентификацию по паролю. Параметр PasswordAuthentication no задан где-то в конфигурации. В Ubuntu 22.04 и более поздних версиях он обычно находится в файле drop-in в каталоге /etc/ssh/sshd_config.d/, который переопределяет основной файл. Просмотрите фактические значения параметров:
sudo sshd -T | grep -Ei 'passwordauthentication|kbdinteractiveauthentication|permitrootlogin'KbdInteractiveAuthentication yes вместе с PasswordAuthentication no по-прежнему позволяет использовать пароль, поскольку метод keyboard-interactive запускает тот же стек PAM. Если отключить один метод, но оставить включенным другой, сервер, который выглядит как настроенный только для ключей, продолжит принимать вводимые пароли.
Too many authentication failures в сообщении о разрыве соединения означает, что клиент предложил несколько ключей, прежде чем перешел к паролю, и сервер достиг значения MaxAuthTries, равного 6 по умолчанию. Принудительно используйте только один метод:
ssh -o IdentitiesOnly=yes -o PubkeyAuthentication=no deploy@203.0.113.10Connection refused на порту, который работал минуту назад, обычно означает, что fail2ban, отслеживающий SSH заблокировал ваш адрес после нескольких неудачных попыток. Правило блокировки по умолчанию отклоняет пакет, а не отбрасывает его, поэтому отказ возвращается быстро, а не после тайм-аута. В консоли команда sudo fail2ban-client status sshd показывает заблокированные адреса, а sudo fail2ban-client set sshd unbanip 203.0.113.10 снимает блокировку с вашего адреса.
Пароли — промежуточный этап, ключи — конечный результат
Пароль, который работает через SSH, может подбирать любой сканер в интернете. Перейдите на аутентификацию по ключу, чтобы подбор пароля больше не имел значения. Создайте пару ключей, установите открытый ключ и подтвердите вход по ключу из второго терминала, прежде чем менять что-либо ещё. В разделе основы управления ключами SSH рассматриваются создание ключей, authorized_keys и парольные фразы.
Затем отключите аутентификацию по паролю и проверьте результат с помощью sudo sshd -T, а не просто доверяйте изменённому файлу. В разделе усиление защиты SSH на VPS рассматриваются остальные параметры sshd, которые стоит изменить, а в разделе первые десять минут на новом VPS они расположены в порядке, в котором их следует настраивать на новом сервере.
После этого сохраните один пароль. Сервер, на котором разрешён вход только по ключу, с неисправной конфигурацией sshd доступен только через консоль провайдера, а эта консоль запрашивает имя пользователя и пароль. Учётная запись с надёжным сохранённым паролем позволяет устранить проблему за пять минут, а не переустанавливать систему.
FAQ
Как изменить пароль root на VPS, если старый пароль неизвестен?
Войдите под пользователем, который может выполнить sudo, и выполните sudo passwd root. Команда задает новый пароль без запроса старого, поскольку sudo уже выполнил аутентификацию. Если ни одна учетная запись на сервере не может выполнить sudo, откройте консоль провайдера, перезагрузитесь в меню восстановления GRUB, выберите пункт оболочки root, выполните mount -o remount,rw /, а затем passwd. Если для root уже установлен пароль и именно этот пароль утрачен, оболочка восстановления запросит его. В таком случае остается использовать rescue image провайдера, подключить диск и выполнить chroot.
Почему passwd выводит сообщение "Authentication token manipulation error"?
Это сообщение возникает по двум причинам. Чаще всего введен неправильный ответ в запросе Current password:, а строка passwd: password unchanged под ним подтверждает, что данные не были записаны. Другая причина — файловая система недоступна для записи. Именно это происходит в режиме восстановления, поскольку / там смонтирована только для чтения. Выполните mount -o remount,rw / и повторите попытку.
Изменяет ли смена пароля Linux также пароль sudo?
Да. У sudo нет собственного пароля. Команда выполняет аутентификацию через PAM по той же записи /etc/shadow, которую используют SSH и su, поэтому для каждой учетной записи используется один пароль. Поэтому первый запрос sudo после смены пароля является фактической проверкой. Выполните sudo -k && sudo -v, чтобы вызвать этот запрос, пока текущий сеанс еще работает.
Нарушит ли смена пароля работу ключей SSH или открытых сеансов?
Нет. При аутентификации по открытому ключу /etc/shadow не используется, поэтому ключи продолжат работать после смены пароля, после passwd -l и после chage -d 0. Уже открытые сеансы останутся активными, поскольку SSH проверяет учетные данные только при входе. В активном сеансе изменится только sudo: после истечения 15 минут с момента проверки оно один раз запросит новый пароль.
Как принудительно обязать пользователя сменить пароль при следующем входе?
Выполните sudo chage -d 0 deploy или sudo passwd -e deploy. Результат будет одинаковым. Сохраненная дата последней смены пароля устанавливается в эпоху, PAM считает пароль просроченным, и при следующем интерактивном входе пользователь должен задать новый пароль до запуска оболочки. Не применяйте это к учетной записи, которую скрипты используют для подключения по SSH: тогда неинтерактивная команда завершится ошибкой Password change required but no TTY available. и не будет выполнена.