Shell中的expect预期交互

本案例要求编写一个expect脚本,实现SSH登录的自动交互:
• 提前准备好目标主机,IP地址为192.168.4.100
• 执行脚本后自动登入,并且在目标主机建立测试文件 /tmp/mike.txt

expect可以为交互式过程(比如FTP、SSH等登录过程)自动输送预先准备的文本或指令,而无需人工干预。触发的依据是预期会出现的特征提示文本。
储备知识(发送邮件的几种方式):

1.	[root@dyy ~]# echo "test mail" | mail -s test root
2.	[root@dyy ~]# mail -s test root < /etc/passwd
3.	[root@dyy ~]# mail -s test root << EOF
4.	test mail
5.	hell world
6.	EOF

步骤一:准备expect及SSH测试环境
1)安装expect工具

1.	[root@dyy ~]# yum  -y  install  expect                  //安装expect
2.	.. ..
3.	Installed:
4.	  expect.x86_64 0:5.44.1.15-5.el6_4                                                            
5.	Dependency Installed:
6.	  tcl.x86_64 1:8.5.7-6.el6 
7.	
8.	[root@dyy ~]# which expect                              //确认expect路径
9.	/usr/bin/expect

步骤二:编写脚本,实现免交互登录
1)任务需求及思路分析
在SSH登录过程中,如果是第一次连接到该目标主机,则首先会被要求接受密钥,然后才提示输入密码:
注意:不要照抄这里的IP地址,需要根据自己的实际IP填写!!!

1.	[root@dyy ~]# ssh root@192.168.4.100                              //连接目标主机
2.	The authenticity of host '192.168.4.100 (192.168.4.100)' can't be established.
3.	RSA key fingerprint is 58:a0:d6:00:c7:f1:34:5d:6c:6d:70:ce:e0:20:f8:f3.
4.	Are you sure you want to continue connecting (yes/no)? yes          //接受密钥
5.	Warning: Permanently added '192.168.4.100' (RSA) to the list of known hosts.
6.	root@192.168.4.100's password:                                   //验证密码
7.	Last login: Thu May  7 22:05:44 2015 from 192.168.4.100
8.	[root@dyy ~]$ exit                                             //返回客户端
9.	logout
10.	Connection to 192.168.4.100 closed.

当然,如果SSH登录并不是第一次,则接受密钥的环节就没有了,而是直接进入验证密码的过程:
注意:不要照抄这里的IP地址,需要根据自己的实际IP填写!!!

1.	[root@dyy ~]# ssh root@192.168.4.100                              //连接目标主机
2.	root@192.168.4.100's password:                                   //验证密码
3.	Last login: Mon May 11 12:02:39 2015 from 192.168.4.100
4.	[root@dyy ~]$ exit                                             //返回客户端
5.	logout
6.	Connection to 192.168.4.100 closed.

2)根据实现思路编写脚本文件
脚本内容参考如下版本1:
注意:不要照抄脚本里的IP地址与密码,需要根据自己的实际情况填写!!!

1.	[root@dyy ~]# vim  expect_ssh.sh 
2.	#!/bin/bash
3.	expect << EOF
4.	spawn ssh 192.168.4.100                               #//创建交互式进程
5.	expect "password:" { send "123456\r" }              #//自动发送密码
6.	expect "#"          { send "touch /tmp.txt\r" }     #//发送命令
7.	expect "#"          { send "exit\r" }
8.	EOF
9.	
10.	[root@dyy ~]# chmod  +x  expect_ssh.sh 

通过循环批量操作,版本2:
注意:不要照抄脚本里的IP地址与密码,需要根据自己的实际情况填写!!!

1.	[root@dyy ~]# vim  expect_ssh.sh 
2.	#!/bin/bash
3.	for i in 10 11                                        #注意IP根据实际情况填写
4.	do
5.	expect << EOF
6.	spawn ssh 192.168.4.$i                               #//创建交互式进程
7.	expect "password:" { send "123456\r" }              #//自动发送密码
8.	expect "#"          { send "touch /tmp.txt\r" }      #//发送命令
9.	expect "#"          { send "exit\r" }
10.	EOF
11.	done
12.	
13.	[root@dyy ~]# chmod  +x  expect_ssh.sh 

注意事项:
expect脚本的最后一行默认不执行
如果不希望ssh时出现yes/no的提示,远程时使用如下选项:
#ssh -o StrictHostKeyChecking=no server0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值