利用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台机器设备均能免密登录. 操 ...
随机推荐
- Statement 和 PreparedStatement 有什么区别?哪个性 能更好?
与 Statement 相比,①PreparedStatement 接口代表预编译的语句,它主要的优 势在于可以减少 SQL 的编译错误并增加 SQL 的安全性(减少 SQL 注射攻击的可 能性):② ...
- Redis 集群,集群的原理是什么?
1).Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务. 2).Redis Cluster 着眼于扩展性,在单个 redis ...
- java使用正则表达式在文档里找匹配
public static void main(String[] args) { String str = "123我是456张三789的学生"; String regex2 = ...
- spring中bean的五种作用域?Spring中的bean是线程安全的吗?
spring中bean的五种作用域 当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleto ...
- centos 7环境下安装部署zookeeper
近一直在看zookeeper的知识,有所收获,打算写些一些关于zookeeper的博客,也当做是自己的复习和笔记. 在上一篇 博客中简单地介绍了centos 7 下如何安装jdk,这一篇将介绍如何在c ...
- layui表单使用开关滑块和复选框,渲染后台数据方法
提示:整个表格要在form标签内 定义开关模板 <div class="layui-form" lay-filter="layuiadmin-app-form-li ...
- SQL语句中关于日期的操作(非常的有用)
在SQL Server 里的日期数据,我们经常可以用 字段<='2008-5-20'这样的表达式,但在oracle却不可以,因为数据类型不一样 字段是date型,'2008-5-20'是字符型, ...
- React+dva+webpack+antd-mobile 实战分享(二)
第一篇 https://segmentfault.com/a/11... 在上一篇文章中教给大家了怎么搭建项目的架子:那么今天我们就来说一下项目里的导航和列表的实现 导航 废话不说啦 下面直接给大家讲 ...
- 大数据学习之路之ambari的安装
之前按照正常方式安装的hbase不能插入数据 所以今天来尝试下ambari能不能行 已经打了快照 如果不能还能恢复之前的样子
- mysql基本操作2
##DDL控制表结构,不支持事务##DML控制表数据,支持事务 DQL专门做查询 ##TCL 管理事务##DCL 管理数据库权限 ##ORDER BY 子句-根据指定列对结果集 ...