linux下执行shell修改用户密码,[转] 关于linux下通过shell命令(自动)修改用户密码...
本文章總結了如何手動、自動修改本地用戶密碼及遠程機器的用戶密碼。對做自動化測試提供了自動修改用戶密碼的原理及方法。
修改本地用戶密碼:
1、交互配置本地用戶:
以root用戶:
passwd
Changing password for user dewang.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
以非root用戶修改自己的密碼(注后面不能跟用戶名,只有root用戶才允許):
passwd
Changing password for user dewang.
Changing password for dewang
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
2、非交互配置本地用戶:
echo | passwd --stdin
或
echo : | chpasswd
或
將:對先寫到一文件passwd.tmp中,然后執行
chpasswd < passwd.tmp
3、自動腳本處理:
根據passwd命令修改用戶密碼,格式為:xxx.sh
#!/bin/sh
# \
exec expect -f "$0" ${1+"$@"}
if { $argc != 2 } {
puts "Usage: $argv0 "
exit 1
}
set password [lindex $argv 1]
spawn passwd [lindex $argv 0]
sleep 1
expect "assword:"
send "$password\r"
expect "assword:"
send "$password\r"
expect eof
說明:如果要通過shell直接調用expect相關命令,則開頭中必須是如下格式,然后后面即可按照expect、TCL格式書寫了。
#!/bin/sh
# \
exec expect -f "$0" ${1+"$@"}
根據echo | passwd --stdin 及 echo : | chpasswd來修改用戶密碼:
#!/bin/sh
if [ $# -ne 2 ] ; then
echo "Usage: `basename $0` "
exit 1
fi
#echo "$2" | passwd --stdin "$1"
echo "$1:$2" | chpasswd
if [ $? -eq 0 ] ; then
echo "change password for $1 success"
else
echo "change password for $1 failed"
fi
修改遠程主機上用戶密碼:
1、交互配置遠程用戶:
echo | ssh -l root passwd --stdin
如:
echo "newpass" | ssh -l root 10.11.103.151 passwd --stdin dewang
root@10.11.103.151's password:
Changing password for user dewang.
passwd: all authentication tokens updated successfully.
或
echo : | ssh -l root chpasswd 2>&1
或
將:對先寫到一文件passwd.tmp中,然后執行
chpasswd < passwd.tmp [作者未測試]
或
ssh -l root
.... 交互輸入root密碼
然后執行以上的所有可用方式均可
2、非交互配置遠程用戶:
則需要用到expect來進行處理,通過ssh登錄到遠程機器,然后結合上述配置方式,以完成自動修改用戶密碼。
#!/usr/bin/expect
#@brief to change user password by ssh remote machine
proc usage {funcname} {
puts "Usage: "
puts "??? $funcname -user "
puts "??? $funcname -root "
}
# check param
if { $argc != 5 } {
usage $argv0
exit 1
}
# get param
set host [lindex $argv 0]
set username [lindex $argv 1]
set newpasswd [lindex $argv 2]
set loginname "root"
if { [string compare [lindex $argv 3] "-user"] == 0 } {
set loginname $username
}
set passwd [lindex $argv 4]
puts "$host $username $newpasswd $loginname $passwd"
spawn ssh -l $loginname $host
expect {
"*(yes/no)*" { send "yes\r"; set sshkey 1 }
"*assword:*" { send "$passwd\r"; set sshkey 0 }
if sshkey == 1 {
expect "*password:*"
send "$passwd\r"
}
}
expect "*#"
if { [string compare $loginname "root"] == 0 } {
#send "echo \"$username:$newpasswd\" | chpasswd\r"
send "echo \"$newpasswd\" | passwd --stdin \"$username\"\r"
} else {
send "passwd\r"
expect {
"*current*assword:" {send "$passwd\r"}
"passwd: Authentication token manipulation error" {exit}
}
expect "New*assword:"
send "$newpasswd\r"
expect "Retype*assword:"
send "$newpasswd\r"
}
expect "*#"
send "exit\r"
#interact 是否將交互權接過來,如果接過來,則用戶這時可進行交互
總結
以上是生活随笔為你收集整理的linux下执行shell修改用户密码,[转] 关于linux下通过shell命令(自动)修改用户密码...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二元函数图像生成器_GAN生成图像综述
- 下一篇: Android模糊查询excel文件内容