it-swarm.com.de

AIX-Kennwort über Skript ändern?

Ich versuche, ein Passwort eines Benutzers über ein Skript zu ändern. Ich kann Sudo nicht verwenden, da es eine Funktion gibt, bei der der Benutzer das Kennwort erneut ändern muss, wenn ein anderer Benutzer sein Kennwort ändert.

AIX läuft auf dem System.

chpasswd ist leider nicht verfügbar.

Ich habe erwartet installiert, aber ich habe auch Probleme damit.

hier ist, was ich dachte, würde funktionieren 

echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

Sobald Sie das Skript ausgeführt haben, werden Sie jedoch mit please enter user's old password Aufgefordert. Sollten sie nicht alle wiedergegeben werden? 

Ich bin ein Anfänger im Shell-Scripting und das ist verblüfft.

36
Grushton94

Du kannst es versuchen:

echo "USERNAME:NEWPASSWORD" | chpasswd

75
Mandar Shinde

Verwenden Sie das FlagGNUpasswdstdin.

Von der man Seite:

   --stdin
          This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.

HINWEIS: Nur für root user.

Beispiel

$ adduser foo 
$ echo "NewPass" |passwd foo --stdin
Changing password for user foo.
passwd: all authentication tokens updated successfully.

Alternativ können Sie expect verwenden. Dieser einfache Code führt den Trick aus:

#!/usr/bin/expect
spawn passwd foo
expect "password:"
send "Xcv15kl\r"
expect "Retype new password:"
send "Xcv15kl\r"
interact

Ergebnisse

$ ./passwd.xp 
spawn passwd foo
Changing password for user foo.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
21
klashxx

Zusätzlich zu den anderen Vorschlägen können Sie dies auch mit einem HEREDOC erreichen.

In Ihrem unmittelbaren Fall könnte dies wie folgt aussehen:

$ /usr/bin/passwd root <<EOF
test
test
EOF
7
Andrew Yasinsky

Sie benötigen echo -e, damit die Zeilenumbrüche wirksam werden

sie schrieben

echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

du solltest es versuchen

echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

es ist sehr wahrscheinlich, dass Sie nicht das alte Kennwort\n dieses Befehls benötigen, sondern nur die beiden neuen Kennwörter. Vergessen Sie nicht, Anführungszeichen in Anführungszeichen zu setzen!

echo -e "new"'!'"passwd123\nnew"'!'"passwd123" | passwd user
6
Elliot Beaumont

Du kannst es versuchen :

echo -e "newpasswd123\nnnewewpasswd123" | passwd benutzer

3
TehesFR

Nur das

passwd <<EOF
oldpassword
newpassword
newpassword
EOF

Tatsächliche Ausgabe von Ubuntu-Maschine (leider kein AIX verfügbar)

[email protected]:~$ passwd <<EOF
oldpassword
newpassword
newpassword
EOF

Changing password for user.
(current) UNIX password: Enter new UNIX password: Retype new UNIX password: 
passwd: password updated successfully
[email protected]:~$
3
CoreyJJohnson

Dies ist von: Skript zum Ändern des Passworts auf Linux-Servern über ssh

Das folgende Skript muss als Datei gespeichert werden (zB ./passwdWrapper) und ausführbar gemacht werden (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

Dann können Sie ./passwdWrapper $user $password $server $newpassword ausführen, wodurch das Passwort tatsächlich geändert wird.

Hinweis: Dies erfordert, dass Sie expect auf dem Computer installieren, von dem aus Sie den Befehl ausführen. (Sudo apt-get install expect) Das Skript funktioniert auf CentOS 5/6 und Ubuntu 14.04, aber wenn sich die Eingabeaufforderungen in passwd ändern, müssen Sie möglicherweise die expect-Zeilen anpassen.

2
Loren
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

Verweisen Sie auch auf den Link unten ...

http://www.putorius.net/2013/04/bash-script-to-change-users-password.html
1
Ikruzzz

Du kannst es versuchen

LINUX

echo-Passwort | passwd Benutzername - stdin

UNIX

echo Benutzername: Passwort | chpasswd -c

Wenn Sie das Argument "-c" nicht verwenden, müssen Sie das nächste Mal das Kennwort ändern. 

1

Wenn Sie ansible verwenden und darin die Sudo-Rechte festlegen können, können Sie dieses Skript problemlos verwenden. Wenn Sie ein solches Skript erstellen möchten, müssen Sie es auf mehreren Systemen ausführen. Daher sollten Sie auch versuchen, dies zu automatisieren.

0
itengineer

Für mich funktionierte dies in einer Vagrant VM:

Sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF
0