bash - one - script para cambiar password linux
¿Cambiar una contraseña de AIX a través de un script? (13)
Además de las otras sugerencias, también puede lograr esto usando un HEREDOC .
En su caso inmediato, esto podría verse así:
$ /usr/bin/passwd root <<EOF
test
test
EOF
Intento cambiar la contraseña de un usuario a través de un script. No puedo usar sudo ya que hay una función que requiere que el usuario cambie la contraseña nuevamente si otro usuario cambia su contraseña.
AIX se está ejecutando en el sistema.
desafortunadamente, chpasswd no está disponible.
He esperado instalar, pero también estoy teniendo problemas con eso.
aquí es lo que pensé que funcionaría
echo "oldpassword/nnewpasswd123/nnewpasswd123" | passwd user
Sin embargo, una vez que ejecute el script me piden que please enter user''s old password
¿no deberían aparecer todos?
Soy un principiante con scripts de shell y esto ha sido desconcertado.
Esto es de: Script para cambiar la contraseña en los servidores de Linux a través de ssh
La siguiente secuencia de comandos deberá guardarse como un archivo (por ejemplo, ./passwdWrapper
) y ser ejecutable ( 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
Luego puede ejecutar ./passwdWrapper $user $password $server $newpassword
que realmente cambiará la contraseña.
Nota: Esto requiere que instale expect
en la máquina desde la cual ejecutará el comando. ( sudo apt-get install expect
) La secuencia de comandos funciona en CentOS 5/6 y Ubuntu 14.04, pero si cambian las indicaciones en passwd
, puede que tenga que ajustar las líneas expect
.
Necesita eco -e para que los caracteres de línea nueva tengan efecto
tu escribiste
echo "oldpassword/nnewpasswd123/nnewpasswd123" | passwd user
Deberías intentarlo
echo -e "oldpassword/nnewpasswd123/nnewpasswd123" | passwd user
lo más probable es que no necesite la porción oldpassword / n de ese comando, solo debe necesitar las dos nuevas contraseñas. ¡No olvides utilizar comillas simples alrededor de los signos de exclamación!
echo -e "new"''!''"passwd123/nnew"''!''"passwd123" | passwd user
Para mí esto funcionó en una máquina virtual vagabunda:
sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF
Puedes probar :
echo -e "newpasswd123 / nnnewpasswd123" | usuario passwd
Puedes probar
LINUX
echo contraseña | nombre de usuario de contraseña --stdin
UNIX
eco nombre de usuario: contraseña | chpasswd -c
Si no utiliza el argumento "-c", debe cambiar la contraseña la próxima vez.
Puedes probar:
echo "USERNAME:NEWPASSWORD" | chpasswd
Sólo esta
passwd <<EOF
oldpassword
newpassword
newpassword
EOF
Salida real de la máquina ubuntu (lo siento, no hay AIX disponible para mí):
user@host:~$ 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
user@host:~$
Si puede usar ansible y establecer los derechos de sudo en él, entonces puede usar este script fácilmente. Si quieres escribir algo como esto, significa que debes hacerlo en más de un sistema. Por lo tanto, debe intentar automatizar eso también.
Use la bandera de GNU passwd
stdin .
Desde la página man
:
--stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
NOTA: solo para usuario root .
Ejemplo
$ adduser foo
$ echo "NewPass" |passwd foo --stdin
Changing password for user foo.
passwd: all authentication tokens updated successfully.
Alternativamente, puede usar expect
, este simple código hará el truco:
#!/usr/bin/expect
spawn passwd foo
expect "password:"
send "Xcv15kl/r"
expect "Retype new password:"
send "Xcv15kl/r"
interact
Resultados
$ ./passwd.xp
spawn passwd foo
Changing password for user foo.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
#!/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 = "admin@%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()
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
Consulte el siguiente enlace también ...
http://www.putorius.net/2013/04/bash-script-to-change-users-password.html
printf "oldpassword/nnewpassword/nnewpassword" | passwd user