У меня есть конкретный вариант использования, когда я действительно хотел бы иметь возможность изменить пароль пользователя с помощью одной команды без интерактивности. Это делается безопасным способом (через SSH и в системе, в которой только один пользователь может войти в систему), поэтому можно указать новый пароль (и даже старый, если необходимо) в командной строке. FWIW, это система Ubuntu.
Я просто хочу избежать добавления чего-то подобного Expect в эту систему только для этой одной задачи.
Вы могли бы использовать chpasswd.
echo user:pass | /usr/sbin/chpasswd
Ты можешь использовать usermod
с -p
возможность указать хеш пароля (не фактический пароль). Вы можете сгенерировать хэш пароля, используя что-то вроде mkpasswd -m sha-256
или mkpasswd -m md5
Конечно.
sed
скрипт, который обновляет файл паролей вашей системы (/etc/shadow
, /etc/master.passwd
, что бы там ни было).В passwd
У утилиты есть опция --stdin, в которой указано:
Эта опция используется, чтобы указать, что passwd должен прочитать новый пароль из стандартного ввода, которым может быть канал.
Синтаксис:
echo "newpass" | passwd --stdin user1
Даже если вы упомянули, что вам все равно, вы можете поместить пароль в текстовый файл, а затем выполнить cat pass.txt
вместо команды echo, таким образом, она не отображается в истории bash.
Если --stdin
вариант не работает, мы можем использовать два варианта:
chpaswd
в вашем сценарии.echo "current_password\nnew_password\nnew_password" | passwd user_name