Могу ли я изменить пароль пользователя в Linux из командной строки без интерактивности?

15

У меня есть конкретный случай использования, когда я действительно хотел бы иметь возможность изменить пароль пользователя с помощью одной команды без интерактивности. Это делается безопасным способом (через SSH и в системе, в которой может быть авторизован только один пользователь), поэтому можно выставить новый пароль (и даже старый, если необходимо) в командной строке. FWIW, это система Ubuntu.

Я просто хочу избежать необходимости добавлять что-то похожее на Expect в эту систему только для одной этой задачи.

Пол Хоффман
источник
3
Для тех, кто хочет сделать это на FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Пол Хоффман

Ответы:

5

Вы можете использовать usermodэту -pопцию для предоставления хэша пароля (не фактического пароля). Вы можете создать хэш пароля, используя что-то вроде mkpasswd -m sha-256илиmkpasswd -m md5

тушеное мясо
источник
1
... Но в моей системе AIX нет usermod: '(- Я исправлю теги в вопросе.
voretaq7
3

Конечно.

  1. Хэш-пароль в вашей локальной системе.
  2. Подключитесь к удаленному компьютеру (где вы хотите изменить пароль)
  3. Поток хэш пароля & имя пользователя для творческого sedсценария , который обновляет файл паролей вашей системы ( /etc/shadow, /etc/master.passwd, все , что случается).
voretaq7
источник
1

passwdУтилита имеет --stdin вариант , который гласит:

Эта опция используется, чтобы указать, что passwd должен прочитать новый пароль из стандартного ввода, который может быть каналом.

Синтаксис:

echo "newpass" | passwd --stdin user1

Несмотря на то, что вы упомянули, что вам все равно, вы можете поместить пароль в текстовый файл, а затем cat pass.txtвместо команды echo сделать так, чтобы он не отображался в истории bash.

Safado
источник
Это один. echo VerySecret | passwd --stdin username
MadHatter
5
Моя система Ubuntu не имеет --stdinопции для passwd.
Джефф Ферланд
Ты прав, это не так. Я проверил как на системе CentOS, так и на Mac, и у них есть опция --stdin, поэтому удаление этого должно быть делом Ubuntu.
Сафадо
1
@RyanM. FreeBSD (и AFAIK NetBSD и OpenBSD, AIX, HP-UX и Solaris, которые я в последний раз проверяю) также не поддерживают --stdin- в основном потому, что это большая гигантская дыра в безопасности, ожидающая
своего появления
1
@quanta: или начать echo "newpass" | passwd --stdin user1строку с пробела; таким образом, это не пойдет в историю истории.
Янне Пиккарайнен
1

Если --stdinопция не работает, мы можем использовать две опции:

  1. Либо используйте другую утилиту, названную chpaswdв вашем скрипте.
  2. ИЛИ использовать echo "current_password\nnew_password\nnew_password" | passwd user_name
Санджай с.
источник