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

修改本地用户密码:

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命令(自动)修改用户密码...相关推荐

  1. Win下执行Swing程序的BAT文件 和 Linux下执行Swing程序的SH文件

    BAT文件: @echo off set CLASSPATH_BAK=%CLASSPATH% set classpath=%CLASSPATH%;.\lib\commons-codec-1.3.jar ...

  2. linux修改密码最短生存时间,Linux基础命令---修改用户密码

    passwd 更改用户密码,超级用户可以修改所有用户密码,普通用户只能修改自己的密码.这个任务是通过调用LinuxPAM和LibuserAPI来完成的.本质上,它使用LinuxPAM将自己初始化为一个 ...

  3. linux添加用户命令_Linux useradd命令添加新用户图文详解

    在Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下: [root@localhost ~]#useradd [选项] 用户名 该命令常用的选项及各自的含义,如表 1 所 ...

  4. android tmp目录权限不够,/tmp目录下执行脚本失败提示Permission denied

    Linux上执行Shell脚本运行失败提示Permission denied一个问题,挺好的问题,切中了知识盲点. 问题现象 Shell脚本在/tmp目录下,执行./test.sh运行失败,提示Per ...

  5. linux的用户及权限管理,Linux 用户及权限管理.doc

    ? ? ? ? ? ? ? ? Linux 用户及权限管理 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Linux 是一个多用户的操作系统,引入用户,可 ...

  6. linux文件权限754表示,Linux命令chmod修改文件权限 777和754方法

    在linux操作系统下,使用shell命令来操作: 常用下面这条命令: chmod 777  文件或目录 示例:chmod  777 /etc/squid 运行命令后,squid文件夹(目录)的权限就 ...

  7. linux中国账号密码忘记,忘记Linux密码的解决办法

    如果忘记了Linux密码,这时有两种情况,一种是用LILO管理器来启动的,另一种是不通过LILO启动的. 如果你的系统是通过LILO管理器来启动的,可在LILO启动提示符LILO boot:后输入Li ...

  8. Linux创建用户命令与删除用户命令

    我们在Linux下创建用户主要有两种方式:adduser和useradd,它们的区别以及主要用法如下: adduser adduser的用法很简单,只需adduser+username即可,如下: s ...

  9. update mysql.user set password_使用update命令来修改Mysql的root密码

    1, 使用update命令来修改Mysql的root密码 使用Mysql update命令既可以修改root的老密码,也可设置root的密码为空,如果使用update命令更改root的密码,需要使用M ...

  10. Linux 基金会执行董事 Jim Zemlin:全球 Linux 的发展和生态

    北京时间 7 月 15 日,由中国开源软件推进联盟(COPU)主办,赛迪传媒.<软件和集成电路>杂志社联合承办,CSDN 独家直播的 2020 第十五届"开源中国开源世界&quo ...

最新文章

  1. 广搜--(搜索的第一道题)图像有用区域
  2. 微信小程序一定要用https的理由,小程序使用HTTPS链接分析
  3. python你是否也走进了这个误区了_Python是不是被严重高估了?
  4. HDU 4348 To the moon
  5. 5分钟k线数据 存储_短线高效炒股——60分钟K线买卖法,抓住买卖时机,看完受益匪浅!...
  6. 为什么突然变乱码_9102年了,还不知道Android为什么卡?
  7. Java Swing 如何关闭当前窗口?
  8. [译] 如何学习 CSS
  9. 北京ICP经营许可证备案申请流程 电信业务经营许可办理
  10. 不同版本的散点图矩阵
  11. 应用安全 - Web安全 - 逻辑漏洞整理
  12. IEnumerable,IQueryable之前世今生
  13. VIM 第五节:文件信息、跳转、定位括号和缩进 https://fishc.com.cn/thread-65856-1-1.html
  14. 有限元分析简介及伽辽金法
  15. Unity资源替换工具,旧模型替换新模型,替换GUID,替换meta文件,文件丢失等问题
  16. “未安装任何音频输出设备”解决办法
  17. 结构体所占字节数的计算
  18. Python攻城师的成长————css语法、伪元素选择器(部分)
  19. html锚点链接怎么互点,通过优化网页核心关键词快速提升排名
  20. java.applet.Applet类

热门文章

  1. android动画超出圆角,Android关于Glide的使用(高斯模糊、加载监听、圆角图片)
  2. vue移动端通过px动态计算图片宽高_vue图片宽高自适应_移动web图片高度自适应的解决方案...
  3. java定义说话方法_类定义的基本形式_Java语言程
  4. C++函数编译原理和成员函数的实现
  5. lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...
  6. java hashcode返回值_Java HashMap返回值未根据我对equals和hashcode的理解进行确认
  7. CRITIC法之matlab
  8. 云 文件 服务器 只存,云 文件 服务器只存
  9. python 生成字符串_Python字符串生成器,按照特定的顺序
  10. 在CSDN写文章头部生成标题目录