使用expect工具ssh登录远程服务器并执行命令操作

来源:互联网 发布:mac重命名命令 编辑:程序博客网 时间:2024/04/28 10:01
Expect说白了就是一个实现人机交互的命令工具,可以抓取和相应用户输入,也可以模拟用户输出。

比如你有n台服务器需要维护,要登录到所有的服务器上执行某项操作(如添加用户、修改一个用户的密码),如果按传统方法,一个一个去登录敲命令那就太麻烦了。可以通过expect写成shell脚本来批量处理,具体如下:
如果系统里没有expect请自行到官网下载安装:http://expect.sourceforge.net/
1、创建服务器列表配置文件:
[root@localhost ~]# viserver_list.conf
192.168.0.10 22 root123456
192.168.0.11 22 root123456
192.168.0.12 60008root 123456

说明:配置文件有4列,以空格分割:服务器IP ssh端口号 用户名 密码
2、编写expect脚本:
[root@localhost ~]# vidotask.exp
#!/usr/bin/expect-f
setipaddress [lindex $argv 0]
set port[lindex $argv 1]
setusername [lindex $argv 2]
set passwd[lindex $argv 3]
settimeout 30
spawn ssh$ipaddress -p$port -l$username
expect{
"yes/no" {send "yes\r";exp_continue }
"password:" { send"$passwd\r" }
}
expect -re"\](\$|#) "
send"touch test \r"
expect -re"\](\$|#) "
send"exit\r"

说明:这里只实现了登录服务器后在当前目录创建了一个test文件,具体需求请自行修改添加命令

3、批量执行
其实只要写好第2步的脚本就可以通过下面命令执行一台服务器的处理:
[root@localhost ~]# expect dotask.exp 192.168.0.10 22 root 123456
但为了能批量处理n台,再写个shell脚本就行了,如下:
[root@localhost ~]# vi doexcute.sh
#!/bin/bash

filename="
server_list.conf"
while read line
do
  #echo $line;
  expect
dotask.exp$line
done <$filename

说明:读取配置文件,循环执行
最后,其他具体的使用方法参见expect手册

=================================================
实用工具:autoexpect
=================================================
如果自己懒得写expect代码,则可以用autoexpect生成。autoexpect工具是用expect写成的一个工具脚本,它可以录制你执行的操作、命令、键盘输入等等,之后自动生成expect脚本。
autoexpect脚本代码见:http://blog.sina.com.cn/s/blog_5432f2730100vcqn.html
使用方法:
1、把上面链接里的autoexpect代码保存成文件:autoexpect.exp
2、执行下面命令进行录制:
[root@localhost ~]# expectautoexpect.exp -p
 说明:执行完上面命令后就可以进行你需要的操作了,需要结束录制时,用exit退出即可。
3、录制完后,会在当前目录生成一个script.exp文件,这个文件就是录制好的expect脚本了。是直接拿来使用,还是再改改,或是学习用,就看你自己的需要了。


===========================================================================================
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for automating interactive tools)。使用它系统管理员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。 :)

Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl

原创粉丝点击