利用expect批量修改Linux服务器密码
一个执着于技术的公众号
背景
修改Linux系统密码,执行passwd
即可更改密码。可如果有成千上百台服务器呢,通过ssh的方式逐一进行修改,对我们来说,工作量是非常大,且效率非常低下。因此采用批量修改密码的方式是比较快的。
环境准备
需求:在Linux环境下运行,需要tcl和expect支持
检查系统是否有expect和tcl:
可以看到系统已经安装有这两个软件,如果没有,yum -y install expect tcl
进行安装即可。
「实验说明:本文利用expect的自动化人机交互功能,登录到远端服务器批量修改密码」
具体步骤
「本文以批量修改服务器root密码为例」
1、编写脚本文件
实现批量修改密码,需要创建三个文件:
touch ~/ip.txt
该文件用于存放目标服务器的IP地址和root密码
这里以两台设备为例,如果你需要修改上百台服务器密码,只需要编写服务器IP及对应的root密码即可。如图所示:
touch ~/passwd.sh
利用for循环实现批量执行,如图:
touch ~/action.exp
利用expect自动人机交互功能,设置特定的匹配形式,便于匹配相应的动作
注意:第一行#! /bin/expect
,表示使用expect解释器执行;第11行表示将密码统一修改为123456
2、为脚本添加可执行权限
3、大功告成,实现批量修改密码
「只需要执行sh passwd.sh
即可实现批量修改密码!」
脚本解释
1)第一个脚本passwd.sh
,应该好理解。就是利用awk命令把我们编写的ip.txt
文本中的服务器IP及root密码分别提取出来;通过for循环,批量交给expect解释器执行。
2)我们重点解释下action.exp
脚本;
第1行告诉操作系统,以下脚本代码使用expect解释器来执行。
第2行及第3行使用
[lindex $argv n]
,表示变量ipaddr
及passwd
接受从bash传递过来的参数,从0开始,分别表示第一个,第二个参数。这里表示从passwd.sh脚本中提取出来的ip及密码第4行设定了本脚本所有的超时时间,单位是秒(s)
第5行利用
spawn
命令启动ssh会话连接第6-9行
expect {}
代表多行期望;当匹配到yes/no
时,自动输入yes并执行回车动作;匹配到password
时,自动输入密码并回车。第11行不用多解释了吧,登录上远程服务器后,将密码修改为123456
第12及13行表示退出expect;其中
expect eof
与spawn
对应,表示捕获终端输出信息的终止。
往期精彩
利用expect批量修改Linux服务器密码的更多相关文章
- ansible批量修改linux服务器密码的playbook
从网上找到批量修改Linux服务器root密码的playbook. 使用方法: 1.输入要修改的inventory组 2.按需要,在playbook中输入要修改的IP.新密码,如下: - hosts: ...
- python批量修改linux主机密码
+++++++++++++++++++++++++++++++++++++++++++标题:python批量修改Linux服务器密码时间:2019年2月24日内容:基于python实现批量修改linu ...
- 批量修改Linux系统密码
截取主机IP地址最后一位数.匹配一组定义好的自定义密码.使用chpasswd修改主机账户密码 截图主机IP [root@web01 ~]# ip addr 1: lo: <LOOPBACK,UP ...
- 批量修改Linux密码脚本(Python)
搭建环境 centos 7.4 使用脚本 python 批量修改connect用户的密码 生成密码为随机密码 保存为xls文档 #!/usr/bin/env python # -*- coding: ...
- 如何在Windows系统上利用Telnet协议连接Linux服务器
Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家 ...
- 修改linux用户密码
对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password: ...
- 利用python批量修改word文件名的方法示例
利用python批量修改word文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...
- 查看和修改Linux服务器的时区和时间
一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...
- Shell 批量修改主机 用户密码
问题:132.121.114 和 132.121.118 网段共 48 台主机未添加基础监控,但是 wh 账户不能登录 需进行批量修改密码操作. 目前情况:op1对上述48台机器设备均能免密登录. 操 ...
随机推荐
- 请简述下你在哪些场景下会选择 Kafka?
日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop.HBase.Solr等. 消息系统:解耦和生产者和消费者.缓 ...
- GC 是什么?为什么要有 GC?
GC 是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误 的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动 监测对象是否超过作用域从而达到自动回收内存 ...
- 说说for循环的两种写法
for循环 执行多次,条件写在()里,语法形式: 1 2 3 for(计数器变量;条件;计数器增减){ // 将要执行的代码 } 示例: 1 2 3 for (int i = 0; i < 5; ...
- (5) 图和表(Figure and Table) 【论文写作】
- C++中的算法头文件<algorithm>,<numeric>和<functional>
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成.<algorithm>是所有STL头文件中最大的一个,它是 ...
- MAUI VS Preview 2.1 win 下无法调试ios, 目前无解
Microsoft Visual Studio Community 2022 (64 位) - Preview 版本 17.2.0 Preview 2.1 报错 严重性 代码 说明 项目 文件 行 禁 ...
- pytest-mark 参数化
在类前或用例前用pytest.mark.parametrize ,可进行参数化 传参方式比较灵活,有很多种,下面是列出的几种方式,其他的可自行研究 @pytest.mark.parametrize(& ...
- JavaWeb知识梳理(可收藏)
**JavaWeb相关知识 ** 1.Servlet 1.1 Status Code(Http状态码) 1.1xx 请求信息 Http状态码 Http Status Code Http状态码含义中文说 ...
- 记录Jenkins升级到最新版遇到的问题
首先吐槽一下Jenkins: 1.安装插件的时候无法根据Jenkins的版本号安装对应的插件! 2.安装插件安装版本不一致的时候无法降低插件版本! 3.为啥要我们升级到最新版! 一.升级原因 我的 ...
- drf中的请求与响应
请求与响应(3星) 请求:Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了Ht ...