Подтвердить что ты не робот

Изменение пароля linux через script?

Я пытаюсь изменить пароль пользователя через script. Я не могу использовать sudo, поскольку есть функция, которая требует от пользователя изменения пароля снова, если другой пользователь изменит свой пароль.

В системе работает AIX.

К сожалению, chpasswd недоступен.

Я ожидаю установки, но у меня также есть проблемы с этим.

вот что я думал, будет работать

echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

однако после запуска script мне будет предложено ввести "пожалуйста, введите старый пароль пользователя", не должны ли все это повторяться?

Я начинаю с shell-скриптов, и это сбивает с толку.

4b9b3361

Ответ 1

Вы можете попробовать:

echo "USERNAME:NEWPASSWORD" | chpasswd

Ответ 2

Используйте флаг 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.

Ответ 3

В дополнение к другим предложениям вы также можете достичь этого, используя HEREDOC.

В вашем ближайшем случае это может выглядеть так:

$ /usr/bin/passwd root <<EOF
test
test
EOF

Ответ 4

Вам понадобится 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

Ответ 5

Вы можете попробовать:

echo -e "newpasswd123\nnnewpasswd123" | пользователь passwd

Ответ 6

От: 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.

Ответ 7

Вы можете попробовать

LINUX

эхо-пароль | имя пользователя passwd --stdin

UNIX

echo имя пользователя: пароль | chpasswd -c

Если вы не используете аргумент -c, вам нужно в следующий раз изменить пароль.

Ответ 8

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

Ответ 9

Если вы можете использовать unsible и установить в нем права sudo, вы можете легко использовать этот script. Если вы хотите script что-то вроде этого, это означает, что вам нужно сделать это на нескольких системах. Поэтому вы также должны попытаться автоматизировать это.

Ответ 10

printf "oldpassword/nnewpassword/nnewpassword" | passwd user

Ответ 11

#!/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()

Ответ 12

Для меня это работало в бродячем ВМ:

sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF