说明:expect可以实现shell实现不了的用户交互需求,expect可以将交互写在一个脚本中,完成很多的自动化操作。
expect的4个关键命令:spawn、expect、send、set
spawn:调用要执行的命令
expect:等待命令提示信息的出现即捕捉用户提示信息
send:发送需要交互的信息来替代手工的输入
set:输入变量值
安装软件包:
yum install -y expect.x86_64
pssh命令在执行时需要手动输入1次登录密码,若想省掉手动输入登录密码操作,有2种方法:
(1) 节点之间建立互信
建立节点之间互信曾遇到的问题
问题1:节点之间建立互信后,验证节点之间免密连接时发现连接仍需要输入密码
若遇到此问题,需检查相应地用户目录权限,如:
gbase用户:检查各节点/home目录下的gbase目录以及.ssh目录权限,除目录的属主可以具有w权限以外,所属组和其他用户均不能对gbase目录及.ssh目录具有w权限;
root用户:检查各节点的root目录以及.ssh目录权限,除目录的属主可以具有w权限以外,所属组和其他用户均不能对root目录及.ssh目录具有w权限;
注:r权限为4,w权限为2,x权限为1
(2) 使用expect命令,可以省略建立节点互信
若采用依赖expect命令,需编写脚本文件:
(1) 编辑运行脚本内容示例如下:
vi test.sh
!/usr/bin/expect
set timeout 300
spawn pssh -A -x “-o StrictHostKeyChecking=no”-h /opt/iplist.txt -i date
expect “*assword” {send “gbase\r”}
expect eof
(2) 脚本中的iplist.txt文件内容示例如下:
gbase@target_ip1
gbase@target_ip2
......
gbase@target_ipn
参数说明:
(1) set timeout -1设置expect永不超时
(2) set timeout 300设置expect 300秒超时,若超过300秒没有expect内容出现,则退出
(3) expect默认超时时间为10秒,若交互执行任务的时间过长,很可能会断开,导致任务任务还未执行完成就终止任务。
(4) 有些指令执行时间过长,需要设定超时时间。
特别注意:
(1) 编辑test.sh文件需要执行用户有x权限
chmod +x test.sh
(2) 执行文件命令
当前路径:./test.sh
绝对路径:expect /opt/test.sh
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。