shell中嵌套expect实现ssh登录

我想在某台测试服务器上集中监控一些服务器的磁盘空间。但是又不想配置主机信任关系,怕不安全,公司不允许。因此想通过shell脚本中嵌套expect方式来实现。


一:安装expect

expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!

expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装。

下载:expect-5.43.0.tar和tcl8.4.11-src.tar

下载地址:https://pan.baidu.com/s/1kVyeLt9

提取密码:af9p

将expect和tcl的软件包下载放到/usr/local/src目录下

(1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装

[root@xw4 src]# tar -zvxftcl8.4.11-src.tar.gz

[root@xw4 src]# cd tcl8.4.11/unix

[root@xw4 unix]# ./configure

[root@xw4 unix]# make && make 

(2)安装expect

[root@xw4 src]# tar -zvxfexpect-5.43.0.tar.gz

[root@xw4 src]# cd expect-5.43.0

[root@xw4 expect-5.43.0]# ./configure--with-tclinclude=/usr/local/src/tcl8.4.11/generic--with-tclconfig=/usr/local/lib/

[root@xw4 expect-5.43.0]# make &&make install 

(3)安装完成后进行测试

[root@xw4 ~]# expect

expect1.1>

expect1.1>

二:修改/etc/hosts文件

比如我想在10.192.203.102机器上ssh访问10.0.9.121

我需要在10.192.203.102上修改/etc/hosts文件,添加要访问地址的IP及主机名对应关系:

10.0.9.121 ocp

否则后面ssh会报错:

reverse mapping checking getaddrinfo forbogon [10.0.9.121] failed - POSSIBLE BREAK-IN ATTEMPT!

三 嵌套expect的shell脚本

cat c.sh

IpGroup=('10.0.9.121' '10.0.9.122')
 
for ip in ${IpGroup[@]}
do
   /usr/local/bin/expect <<-EOF
   set timeout 3                      
   spawn ssh oracle@$ip
   expect {
    "*yes/no" { send "yes\r"; exp_continue }
    "*password:" { send "oracle\r" }
    }
   expect "*#"
   send "df -h\r" 
   expect "*#"
   send "exit\r"
   interact       
   expect eof
EOF
done

脚本内容介绍:

/*

set timeout n命令将expect命令的等待超时时间设置为n秒,在n秒内还没有获取到其期待的命令,expect 为false,脚本会继续向下执行;

spawn command命令会fork一个子进程去执行command命令,然后在此子进程中执行后面的命令;

send命令的一般用法为 send"string",它们会我们平常输入命令一样向命令行输入一条信息,当然不要忘了在string后面添加上 \r 表示输入回车;

send "oracle\r"表示输入用户的密码

interact:执行到此命令时,脚本fork的子进程会将操作权交给用户,允许用户与当前shell进行交互;

*/ 

#给脚本赋予执行权限

chmod +x c.sh 

#调用脚本

sh c.sh

  

--本篇文章参考了:http://www.cnblogs.com/kevingrace/p/5900303.html

http://www.cnblogs.com/zhenbianshu/p/5867440.html

http://bbs.chinaunix.net/thread-2320506-1-1.html

猜你喜欢

转载自blog.csdn.net/YABIGNSHI/article/details/75228248