Назад | Перейти на главную страницу

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

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

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

Вы могли бы использовать chpasswd.

echo user:pass | /usr/sbin/chpasswd

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

Конечно.

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

В passwd У утилиты есть опция --stdin, в которой указано:

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

Синтаксис:

echo "newpass" | passwd --stdin user1

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

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

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