我们在远程操作其它服务器时,希望写一个脚本自动运行就完事了,但是很多命令(例如:scp、ssh)是交互式的,需要等对方提示后才能输入,如果直接两条命令过去,第一条的返回交互消息还没提示,这边第二条就已经请求了,这样是无效的,所以交互式的就不能写自动脚本了。于是我们需要一种方式,输入后等待提示,然后再自动填写,这时候就需要用expect了。
安装tcl(Tool Command Language),expect
安装文件下载:expect&tcl的安装文件
rpm -i ./expect-5.45-14.el7_1.x86_64.rpm
rpm -i ./tcl-8.5.13-8.el7.x86_64.rpm
下面就是一个执行远程脚本的交互脚本,具体的命令学习tcl&expect
#!/usr/bin/expect
set user root
set pass 123456
set shfile /home/depoly.sh
set ip 192.168.1.1
spawn ssh ${user}@${ip} "${shfile}"
expect "${user}@${ip}'s password:"
send "${pass}\r"
interact
说明
-
spawn接管目标程序的输入输出
-
expect拦截分析目标程序的输出,如果符合拦截的格式,继续向下执行
-
send向目标程序输入
-
interact将控制权交给用户