关于linux下(自动)修改用户密码
来源:互联网 发布:手机画板软件哪个好 编辑:程序博客网 时间:2024/06/11 09:32
本文章总结了如何手动、自动修改本地用户密码及远程机器的用户密码。对做自动化测试提供了自动修改用户密码的原理及方法。
修改本地用户密码:
1、交互配置本地用户:
以root用户:
passwd <username>
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 <newpasswd> | passwd --stdin <username>
或
echo <username>:<passwd> | chpasswd
或
将<username>:<passwd>对先写到一文件passwd.tmp中,然后执行
chpasswd < passwd.tmp
3、自动脚本处理:
根据passwd命令修改用户密码,格式为:xxx.sh <username> <passwd>
#!/bin/sh
# \
exec expect -f "$0" ${1+"$@"}
if { $argc != 2 } {
puts "Usage: $argv0 <username> <passwd>"
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 <newpasswd> | passwd --stdin <username> 及 echo <username>:<passwd> | chpasswd来修改用户密码:
#!/bin/sh
if [ $# -ne 2 ] ; then
echo "Usage: `basename $0` <username> <passwd>"
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 <newpasswd> | ssh -l root <host> passwd --stdin <username>
如:
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 <username>:<passwd> | ssh -l root <host> chpasswd 2>&1
或
将<username>:<passwd>对先写到一文件passwd.tmp中,然后执行
chpasswd < passwd.tmp [作者未测试]
或
ssh -l root <host>
.... 交互输入root密码
然后执行以上的所有可用方式均可
2、非交互配置远程用户:
则需要用到expect来进行处理,通过ssh登录到远程机器,然后结合上述配置方式,以完成自动修改用户密码。
#!/usr/bin/expect
#@brief to change user password by ssh remote machine
proc usage {funcname} {
puts "Usage: "
puts " $funcname <host> <username> <newpasswd> -user <userpasswd>"
puts " $funcname <host> <username> <newpasswd> -root <rootpasswd>"
}
# 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"
修改本地用户密码:
1、交互配置本地用户:
以root用户:
passwd <username>
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 <newpasswd> | passwd --stdin <username>
或
echo <username>:<passwd> | chpasswd
或
将<username>:<passwd>对先写到一文件passwd.tmp中,然后执行
chpasswd < passwd.tmp
3、自动脚本处理:
根据passwd命令修改用户密码,格式为:xxx.sh <username> <passwd>
#!/bin/sh
# \
exec expect -f "$0" ${1+"$@"}
if { $argc != 2 } {
puts "Usage: $argv0 <username> <passwd>"
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 <newpasswd> | passwd --stdin <username> 及 echo <username>:<passwd> | chpasswd来修改用户密码:
#!/bin/sh
if [ $# -ne 2 ] ; then
echo "Usage: `basename $0` <username> <passwd>"
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 <newpasswd> | ssh -l root <host> passwd --stdin <username>
如:
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 <username>:<passwd> | ssh -l root <host> chpasswd 2>&1
或
将<username>:<passwd>对先写到一文件passwd.tmp中,然后执行
chpasswd < passwd.tmp [作者未测试]
或
ssh -l root <host>
.... 交互输入root密码
然后执行以上的所有可用方式均可
2、非交互配置远程用户:
则需要用到expect来进行处理,通过ssh登录到远程机器,然后结合上述配置方式,以完成自动修改用户密码。
#!/usr/bin/expect
#@brief to change user password by ssh remote machine
proc usage {funcname} {
puts "Usage: "
puts " $funcname <host> <username> <newpasswd> -user <userpasswd>"
puts " $funcname <host> <username> <newpasswd> -root <rootpasswd>"
}
# 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 是否将交互权接过来,如果接过来,则用户这时可进行交互操作
原文:http://hi.baidu.com/honstdw/item/71d5ba0ce4fdeac02f4c6bc3
0 0
- 关于linux下(自动)修改用户密码
- Linux下修改mysql用户密码
- linux下修改mysql用户密码
- 修改linux用户密码(passwd)
- linux下创建用户和修改用户密码
- linux下修改用户密码方法搜集
- 教你在linux下修改用户密码
- 教你在linux下修改用户密码
- linux下passwd命令设置修改用户密码
- linux下批量修改用户密码(转)
- linux下passwd命令设置修改用户密码
- linux 下忘记 root用户密码修改
- Linux下修改MySQL的root用户密码
- Linux下修改Mysql的用户密码
- linux下passwd命令设置修改用户密码
- linux下passwd命令设置修改用户密码
- Linux下mysql的root用户密码修改
- 在linux下,修改mysql的用户密码。
- 组合模式
- 梦想,在路上
- C++primer plus第六版课后编程题答案17.7
- 为什么很少有人在博客里写一些杂谈
- MPC8313ERDB从NAND FLASH中启动系统
- 关于linux下(自动)修改用户密码
- JS对象字面值编程--动态DOM框架例子
- java回调机制
- IT系统故障引起的一个事故的思考
- 云计算概述
- CXF学习01---开发服务端与客户端
- Python学习(一):入门篇:python中的一些数据结构
- 每天一个C++小程序(十四)--堆排序
- 一个带有超级罗嗦注释的-------JS表单验证