У меня есть проект, который требует, чтобы я создал сценарий / последовательность команд для изменения пароля root в установке CentOS 7.
Я могу предположить, что пользователь, который будет выполнять сценарий, уже является пользователем root.
В настоящее время я использую следующее и получаю сообщение об успехе:
[root@localhost]# echo -e ‘password\npassword’ | (passwd --stdin root)
Changing password for user root.
passwd: all authentication tokens updated successfully.
Однако на самом деле это не меняет пароль. При дальнейшем осмотре (установка пароля вручную) замечаю пароль password
не проходит проверку словаря, но в конце сообщает об успехе:
[root@localhost]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
Одно из возможных решений - попробовать хешировать данный пароль на основе метода и соли, указанных в /etc/shadow
, но я бы хотел избежать слишком сложного решения. Я также мог проверить, есть ли значение в /etc/shadow
на самом деле изменилось, но это игнорирует случай, когда установлен пароль, который уже был, что я хотел бы поддержать.
Есть ли у кого-нибудь предложение попытаться проверить пароль перед его установкой или, желательно, получить ПОЛНЫЙ вывод из passwd
?
Когда используешь passwd --stdin
вам нужно всего лишь один раз отправить пароль. Итак, правильная версия
echo password | passwd --stdin
Если ваш образец кода точен, то (а) у вас там есть умные кавычки, когда вам нужны прямые кавычки, и (б) пароль, вероятно, установлен на что-то вроде `password \ npassword '(возможно, с умными кавычками с обеих сторон).
Заставить вещи работать с passwd
Команда впечатляет, поскольку она традиционно интерактивна, и ее сложно автоматизировать. (Да здравствует поколение gnu за то, что оно относительно безболезненно.) Но если вы занимаетесь автоматизацией, почему бы не использовать команды, более удобные для автоматизации, например chpasswd
?
echo root:password | chpasswd
будет делать то, что вы делаете выше. И если вы хотите сделать 50 сразу, просто отправьте больше строк username:password
.