关于linux下通过shell命令(自动)修改用户密码

2012-04-23 18:47:39

分类:

原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer

本文章总结了如何手动、自动修改本地用户密码及远程机器的用户密码。对做自动化测试提供了自动修改用户密码的原理及方法。

修改本地用户密码:
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 是否将交互权接过来,如果接过来,则用户这时可进行交互

[转] 关于linux下通过shell命令(自动)修改用户密码的更多相关文章

  1. Linux下使Shell 命令脱离终端在后台运行

    --Linux下使Shell 命令脱离终端在后台运行------------------------------------2014/02/14你是否遇到过这样的情况:从终端软件登录远程的Linux主 ...

  2. linux下实现shell脚本自动连接mongodb数据库并创建索引

    在linux下创建shell脚本

  3. linux下passwd命令设置修改用户密码

    1.passwd 简单说明: 我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码:passwd命令的用法也很多,我们只选如下的几个参数加以说明:想了解更多,请参考man passwd或p ...

  4. 【转】linux下passwd命令设置修改用户密码

    1.passwd 简单说明: 我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码:passwd命令的用法也很多,我们只选如下的几个参数加以说明:想了解更多,请参考man passwd或p ...

  5. Linux chpasswd (批量或单一修改用户密码)和passwd(直接修改用户密码)

    Linux命令:chpasswd 批量或者单一修改用户密码 语法: 1:# echo 用户名:密码 | chpasswd 2:# chpasswd < doiido.txt 实例 1.直接修改d ...

  6. linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)

    程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...

  7. (转)Linux下使Shell 命令脱离终端在后台运行

    转自: http://www.linuxidc.com/Linux/2011-05/35723.htm 方法如下: (1)输入命令: nohup 你的shell命令 & (2)回车,使终端回到 ...

  8. Java调用Linux下的shell命令并将结果以流的形式返回

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public cl ...

  9. linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi

    最近在调试wifi,已经把wpa_supplicant 工具编译打包好了,为了测试wif驱动及wifi模块是否ok,需要用shell命令临时启动wifi服务连接wifi热点测试. 首先板子启动用ifc ...

随机推荐

  1. [转]MySQL去除查询结果重复值

    在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所 ...

  2. CMD规范

    define(function (require, exports, module) { module.exports = require('xx/xx/xx')({}); });

  3. Android AChartEngine 去除折线图黑边

    通常使用AChartEngine画出的折线图,如果背景不是黑色,则会在折线图的坐标轴旁边出现黑边,如图所示: 试了好多设置,最后终于发现,去除黑边的设置是: mRenderer.setMarginsC ...

  4. 【uTenux实验】时间管理(系统时间/周期性处理/警报处理)

    1.系统时间管理 系统时间管理函数用来对系统时间进行操作,是OS的一个基础性的东西.个人认为,设置系统时间和获取系统时间对OS来说基本是可有可无的. uTenux提供了三个系统时间相关API.分别用于 ...

  5. 使用ADD_CUSTOM_COMMAND 添加自定义命令

    e.g. ADD_CUSTOM_COMMAND(           TARGET world_server           COMMAND cp ${CMAKE_SOURCE_DIR}/CMak ...

  6. 创建eclipse针对NDK的联合编译环境。

    警告, 这篇文章是老的配置方式, 随着goolge工具的完善,有了更高级的配置方式,参考文章: 1.http://jingyan.baidu.com/article/3ea51489e7a9bd52e ...

  7. eclipse中提示HttpServletRequest不能引用的解决办法

    两种解决方法: 1.右键点击项目->Build Path->Add Libraries..->Server Runtime 选择Apache Tomcat v8.0 2.右键点击项目 ...

  8. (整理)SQL server 2012 中文乱码与5030错误

    安装2012后,一直没注意到中文的问题.直到有一天,突然发现字段内容竟然是“??”,然后一通查,原来是排序规则需要改变: 选择数据库->右键属性->选项,将排序规则改成“Chinese_P ...

  9. IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果

    今下午项目中使用到了 扬声器和听筒的设置,我项目中是这样的,有一个聊天设置,聊天设置有一个使用扬声器 播放声音的设置. 这个设置是,当你打开那个开关的话,你在聊天中都可以根据你的使用来任意的播放声音, ...

  10. sql group by

    group by实例 实例一 数据表: 姓名 科目 分数 张三 语文 80 张三 数学 98 张三 英语 65 李四 语文 70 李四 数学 80 李四 英语 90 期望查询结果: 姓名 语文 数学 ...