以前批量管理服务都是通过ssh建立信任关系,也有人用puppet等集中管理软件,只要写好脚本在控制端运行即可,但是现在这两样都没有,让你改10台服务器的密码,可以手动修改,但是成百或上千台呢,这工程量可想而知。
通过expect交互式脚本,可以轻松解决这些问题,下面具体看如何实现
1、检查系统是否安装expect
rpm -qa | grep expect
若没有用yum安装,只需要在控制端这一台机器装就可以了
yum install -y expect
2、创建服务器列表文件,格式如下(前边是IP,中间是当前登陆密码,第三列是要修改的密码)
vi iplist.txt
192.168.1.100 123456 123abc
192.168.1.101 654321 abc123
······
3、创建脚本
创建一个bash脚本,通过for循环读取IP和密码,然后给expect脚本
vi auto_login.sh
#!/bin/bash
for i in `awk '{print $1}' iplist.txt`
do
y=`awk /${i}/'{print $2}' iplist.txt`
z=`awk /${i}/'{print $3}' iplist.txt`
./expect.sh ${i} ${y} ${z}
done
创建expect交互式脚本
vi expect.sh
#!/usr/bin/expect -f
set IP [lindex $argv 0] ##设置IP为第一个带入项,也就是上边脚本的$i
set PASSWORD [lindex $argv 1] ##同理,第二个带入项,$y
set NEWPASSWORD [lindex $argv 2] ##同理,第三个带入项,$z
spawn ssh $IP " echo '$NEWPASSWORD'| passwd --stdin root " ##spawn后边跟要执行的命令,此例是把root密码改成iplist.txt中的第三列的数值
expect {
"(yes/no)" { send "yes\r"; exp_continue } ##如果第一次登陆,就发送yes
"password:" { send "$PASSWORD\r"; exp_continue } ##发送登陆密码
"*?" { send "\r" } ##没有交互直接发个回车
}
interact
exit
给可执行权限
chmod 755 auto_login.sh expect.sh
运行
./auto_login.sh
通过这个脚本,还可以实现很多功能,只要修改spawn后边的命令就可以了。
备注:expect脚本不能使用sh expect.sh这样的运行方式,所以在写bash的那个脚本的时候要注意。
2011-11-02修正:
红色部分为新增部分,如果修改的机器中有部分使用了ssh信任,用之前的方法也可以更新,但后边有报错,加入红色部分后,就不会有报错了。
相关推荐
本文档主要介绍如何使用 Expect 脚本来批量修改远程 Linux 服务器的密码。该方法可以快速地对多台服务器进行密码修改,并且可以实现自动化操作。 知识点: 1. Expect 脚本的使用:Expect 是一个非常强大的工具,...
需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2 模块,不得不承认用php 来处理这样...
总之,"批量修改Linux密码"是一个实用的脚本示例,它展示了如何结合`expect`工具和bash脚本实现自动化系统管理任务。这对于大型Linux环境的系统管理员来说,无疑提高了工作效率,减少了手动操作的繁琐和出错的可能性...
但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具。 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh...
`expect`是一个强大的自动化交互式程序的工具,它能够模拟用户与命令行的交互,使得我们可以通过脚本批量执行远程命令和脚本。在本文中,我们将深入探讨如何在`CentOS`中利用`expect`进行批量远程操作。 首先,确保...
完成信任关系建立后,我们可以使用shell脚本来批量修改远程服务器的密码。这里涉及的主要工具是`expect`,它是一个能交互式控制程序的工具,常用于自动化SSH登录和密码输入。在大多数Linux发行版中,`expect`可能并...
编写一个简单的Expect脚本来实现自动化的SSH无密码登录部署。 ```bash [root@server-202 ~]# cat << EOF > deploy_ssh.expect #!/usr/bin/expect set timeout 300 set ip_list [lrange {192.168.10.202 192.168.10....
3.支持修改用户密码、切换用户的密码、Root密码 4.支持日志记录操作指令、屏幕输出 5.支持断线重连。因为是单进程单线程的,所以有可能执行到后面的机器SSH连接已断开。 --- 1.语言字符需要zh_CN.UTF-8 2.需要Perl ...
2. **批量配置设备**:如路由器、交换机等网络设备的批量配置可以通过expect脚本来实现。 3. **远程管理**:通过expect可以实现对远程主机的自动化管理,比如自动登录并执行一些维护任务。 4. **数据采集**:自动化...
在提供的 `/root/soft_shell/allscp.sh` 脚本中,Expect 被用来自动化 SCP 命令的交互过程。脚本接受五个参数:源文件、用户名、主机IP、目标文件和密码。首先,它检查参数是否完整,然后使用 `spawn` 命令启动一个...
此示例展示如何使用`Expect`脚本来执行文件传输任务。 ```tcl #!/usr/bin/expect set password "123456" set timeout 300 spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/ expect "root@192.168.1.218's ...
通过上述两种方法,我们可以实现使用shell脚本批量自动发送公钥到远程主机,从而实现SSH无密码登录。这种方法在管理大规模服务器环境时尤为实用,极大地提高了工作效率。在实际应用中,应根据自己的环境和需求选择...
脚本执行过程中可能会遇到权限问题,特别是当需要交互输入(如设置MySQL root用户的密码)时。这时可以使用`expect`工具模拟用户输入,或者在安全安装脚本中指定默认值。 除了基本的安装,你还可以扩展脚本,例如,...
通过编写expect脚本,可以实现对多台服务器的批量登录和操作。尽管expect在处理交互式任务时非常强大,但在大规模网络中,由于逐台登录执行命令的速度较慢,可能无法满足快速响应的需求。 针对100-1000台服务器的...
这些命令在几乎所有的Expect脚本中都会出现,并且它们各自承担着不同的职责: 1. **`spawn` 命令** - **功能**:`spawn` 是Expect的第一个命令,用来启动一个新的进程。所有后续的 `expect` 操作都将在这个进程中...
### 使用Expect实现自动登录至多台服务器的Shell脚本 #### 概述 在现代IT运维工作中,常常需要登录到多台服务器上执行相同或类似的命令。为了提高工作效率、减少人为错误并简化这一过程,我们可以利用`expect`工具...
以下是一个使用`expect`进行SSH登录的简单脚本: ```bash #!/usr/bin/expect -f set ip [lindex $argv 0] # 接收第一个参数,设置IP地址 set password [lindex $argv 1] # 接收第二个参数,设置密码 set timeout 10...
使用非root用户执行脚本,只给予必要的权限,并且避免硬编码敏感信息如密码在脚本中,可以使用环境变量或密钥对授权。 7. **日志记录**:在脚本中添加日志输出,如`echo`命令,可以帮助追踪脚本的执行过程,方便...