1. 分发系统介绍
如今一些比较大的企业,大都使用了负载均衡,而有时因为一些程序要更改,或者有些bug要修改,快速更新代码等,如果仅是几台server的话,很简单,把已经改好的程序拷过去,或者rsync远程推送,再或者网上NFS共享一下就可以了;但如果有几十台几百台,那样的方法会太繁琐,此时就可以用expect来批量实现分发任务。
-
expect:一个实现自动交互功能的软件套件,基于Tcl的一种脚本语言,具有简单的语法;
-
功 能 :实现自动登录远程机器,并自动执行命令;和shell脚本结合,可以实现完全自动化;
-
注 意:若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。但当不能使用密钥验证的时候,我们就没有办法了。所以,这时只知道对方机器的账号和密码可以通过expect脚本实现登录和远程命令。
2.expect脚本远程登录
1.安装expect 软件套件 命令: yum install -y expect
2. 完成远程登录并执行的脚本
主机端: 192.168.2.168
远程端:192.168.2.188
(1)在主机端,进入/usr/local/sbin/ ,创建一个expect 脚本; vim 1.expect
(2) 先用 ssh 192.168.2.168 直接登录远程端
[root@ying01 sbin]# ssh 192.168.2.188
[email protected]'s password:
Last login: Thu Aug 2 08:28:02 2018 from 192.168.2.168
[root@ying02 ~]# 登出
Connection to 192.168.2.188 closed.
(3) 授予1.expect 可执行权限,自动连接远程端。
[root@ying01 sbin]# ./ 1.expect
-bash: ./: 是一个目录
[root@ying01 sbin]# ./1.expect
-bash: ./1.expect: 权限不够
[root@ying01 sbin]# chmod a+x 1.expect
[root@ying01 sbin]# ./1.expect
spawn ssh [email protected]
[email protected]'s password:
Last login: Thu Aug 2 15:22:34 2018 from 192.168.2.168
为了让远程登录时候出现提示,可以清空/root/.ssh/known_hosts目录;然后执行1.except,可以看到脚本,自动执行
清空密匙:
自动执行了:
3.
3. expect脚本远程执行命令
在主机端建立2.expect,查看其脚本
同样需要授予2.expect 访问权限:chmod a+x 2.expect
执行2.expect: #./2.expect
在远程端查看执行的情况:
4. expect脚本传递参数
expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个….参数
给予可执行权限,并定义参数后执行脚本
#chmod a+x 3.expect
执行命令及结果: