Ответ 1
Вы можете попробовать:
echo "USERNAME:NEWPASSWORD" | chpasswd
Я пытаюсь изменить пароль пользователя через script. Я не могу использовать sudo, поскольку есть функция, которая требует от пользователя изменения пароля снова, если другой пользователь изменит свой пароль.
В системе работает AIX.
К сожалению, chpasswd недоступен.
Я ожидаю установки, но у меня также есть проблемы с этим.
вот что я думал, будет работать
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
однако после запуска script мне будет предложено ввести "пожалуйста, введите старый пароль пользователя", не должны ли все это повторяться?
Я начинаю с shell-скриптов, и это сбивает с толку.
Вы можете попробовать:
echo "USERNAME:NEWPASSWORD" | chpasswd
Используйте флаг GNU passwd
stdin.
На странице man
:
--stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
ПРИМЕЧАНИЕ. Только для пользователя root.
Пример
$ adduser foo
$ echo "NewPass" |passwd foo --stdin
Changing password for user foo.
passwd: all authentication tokens updated successfully.
В качестве альтернативы вы можете использовать expect
, этот простой код выполнит трюк:
#!/usr/bin/expect
spawn passwd foo
expect "password:"
send "Xcv15kl\r"
expect "Retype new password:"
send "Xcv15kl\r"
interact
Результаты
$ ./passwd.xp
spawn passwd foo
Changing password for user foo.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
В дополнение к другим предложениям вы также можете достичь этого, используя HEREDOC.
В вашем ближайшем случае это может выглядеть так:
$ /usr/bin/passwd root <<EOF
test
test
EOF
Вам понадобится echo -e для символов новой строки, которые будут влиять на
вы написали
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
попробуйте
echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
более чем вероятно, вам не понадобится часть oldpassword\n этой команды, вам просто нужны два новых пароля. Не забудьте использовать одинарные кавычки вокруг восклицательных знаков!
echo -e "new"'!'"passwd123\nnew"'!'"passwd123" | passwd user
Вы можете попробовать:
echo -e "newpasswd123\nnnewpasswd123" | пользователь passwd
От: Script сменить пароль на серверах linux через ssh
script ниже нужно сохранить в виде файла (например, ./passwdWrapper
) и сделать исполняемым (chmod u+x ./passwdWrapper)
#!/usr/bin/expect -f
#wrapper to make passwd(1) be non-interactive
#username is passed as 1st arg, passwd as 2nd
set username [lindex $argv 0]
set password [lindex $argv 1]
set serverid [lindex $argv 2]
set newpassword [lindex $argv 3]
spawn ssh $serverid passwd
expect "assword:"
send "$password\r"
expect "UNIX password:"
send "$password\r"
expect "password:"
send "$newpassword\r"
expect "password:"
send "$newpassword\r"
expect eof
Затем вы можете запустить ./passwdWrapper $user $password $server $newpassword
, который фактически изменит пароль.
Примечание. Для этого необходимо установить expect
на машине, с которой будет выполняться команда. (sudo apt-get install expect
) script работает с CentOS 5/6 и Ubuntu 14.04, но если подсказки в passwd
изменяются, возможно, вам придется подстроить строки expect
.
Вы можете попробовать
LINUX
эхо-пароль | имя пользователя passwd --stdin
UNIX
echo имя пользователя: пароль | chpasswd -c
Если вы не используете аргумент -c, вам нужно в следующий раз изменить пароль.
Here is the script...
#!/bin/bash
echo "Please enter username:"
read username
echo "Please enter the new password:"
read -s password1
echo "Please repeat the new password:"
read -s password2
# Check both passwords match
if [ $password1 != $password2 ]; then
echo "Passwords do not match"
exit
fi
# Does User exist?
id $username &> /dev/null
if [ $? -eq 0 ]; then
echo "$username exists... changing password."
else
echo "$username does not exist - Password could not be updated for $username"; exit
fi
# Change password
echo -e "$password1\n$password1" | passwd $username
См. также ссылку ниже...
http://www.putorius.net/2013/04/bash-script-to-change-users-password.html
Если вы можете использовать unsible и установить в нем права sudo, вы можете легко использовать этот script. Если вы хотите script что-то вроде этого, это означает, что вам нужно сделать это на нескольких системах. Поэтому вы также должны попытаться автоматизировать это.
printf "oldpassword/nnewpassword/nnewpassword" | passwd user
#!/usr/bin/python
import random
import string
import smtplib
import sys
import os
from subprocess import call
import socket
user = sys.argv[1]
receivers = ["%[email protected]" %user]
'''This will generate a 30 character random password'''
def genrandpwd():
return ''.join(random.SystemRandom().choice(string.ascii_lowercase + string.digits + string.ascii_uppercase + string.punctuation) for _ in range(30))
def change_passwd(user, password):
p = os.popen("/usr/bin/passwd %s" %user, "w")
p.write(password)
p.write("\n")
p.write(password)
p.close()
def chage(user):
agepasswd = call(["/usr/bin/chage", "-d", "0", "%s" %user])
def mailpwd(user, password):
sender = "[email protected]%s" %socket.gethostname()
subj = "!!!IMPORTANT!!!, Unix password changed for user %s" %user
text = "The password for the %s user has changed, the new password is:\n\n %s \n\n Note: The system will force to change the password upon initial login. Please use the password provided in the mail as your current password and type the password of your choice as the New password" %(user, password)
message = message = 'Subject: %s\n\n%s' % (subj, text)
smtpObj = smtplib.SMTP('mailrelay-server.domain.com')
smtpObj.sendmail(sender, receivers, message)
smtpObj.quit()
def main():
newpwd = genrandpwd()
change_passwd(user, newpwd)
chage(user)
mailpwd(user, newpwd)
if __name__ == "__main__":
main()
Для меня это работало в бродячем ВМ:
sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF