自动化控制工具expect的部署

简介:          前几天下班的时候,听系统运维组的经理在给本部门的人推荐expect工具,这个工具我曾经用过,本以为现在关注的人少了,没想到它的粉丝还是很多的,借此机会,我翻出之前整理过的文档,再次发挥余热。
         前几天下班的时候,听系统运维组 的经理在给 本部门的人推荐expect工具,这个工具我曾经用过,本以为现在
关注的人少了,没想到它的粉丝还是很多的,借此机会,我翻出之前整理过的文档,再次发挥余热。
##########################################
# create by maidong
# date 2011--05-13  晚
# http://www.bdkyr.com
#
      Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,
它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理
方面发挥很大的作用。
spawn命令激活一个Unix程序来进行交互式的运行。 
send命令向进程发送字符串。
expect命令等待进程的某些字符串。 
expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作.

#-------------------------------------------------------------------------#
Other interesting scripts are available separately in the directory
http://expect.nist.gov/scripts/ (ftpable as
ftp://ftp.nist.gov/mel/div826/subject/expect/scripts).  (See below for
how to retrieve these.)  You are welcome to send me scripts to add to
this directory.  A number of Expect scripts are also available in the
Tcl archive, available at ftp://ftp.neosoft.com/pub/tcl.
#----------------操作步骤----------------------------------------------------#
A. Tcl 安装
主页: http://www.tcl.tk
下载地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml

1.下载源码包
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tk8.4.11-src.tar.gz

2.解压缩源码包
#tar xfvz tk8.4.11-src.tar.gz   #暂时可以不用
tar xfvz tcl8.4.11-src.tar.gz
3.安装配置
cd tcl8.4.11
cd unix
./configure --prefix=/usr/tcl --enable-shared
make && make install

4.安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。
  暂时不要删除tcl源代码,因为expect的安装过程还需要用。
cp tclUnixPort.h ../generic/

B. expect 安装 (需Tcl的库)
主页: http://expect.nist.gov/

1.下载源码包
wget http://expect.nist.gov/expect-5.43.0.tar.gz
wget http://cdnetworks-kr-1.dl.sourceforge.net/project/buluoos/0.1/src/expect-5.43.0.tar.gz

2.解压缩源码包
tar xfvz expect-5.43.0.tar.gz

3.安装配置
cd expect-5.43
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib  --with-tclinclude=/home/xuekun/tools/tcl8.4.11/generic/
make
make install
#--实例1.1----by maidong-------------------------------------------------#
[root@nginx scripts]# vi expect.exp

#!/usr/expect/bin/expect
set timeout 60
set port 50718
set host 192.168.15.52
set name root
set password dn3s
spawn ssh -p$port  $host -l $name
expect  {
         "(yes/no)?" {
            send "yes\r"
            expect "password:"
            send "$password\r"
          }
        "password:" { send "$password\r" }

}
expect "#"
send "uname\n"
expect "Linux"
send_user "Now you can do some operation on this terminal\n"

[root@nginx scripts]# /usr/expect/bin/expect expect.exp
spawn ssh -p50718 192.168.15.52 -l root
root@192.168.15.52's password:
Last login: Sun May 15 05:41:26 2011 from 192.168.15.51
[root@lamp-002 ~]# uname
Linux
Now you can do some operation on this terminal
[root@nginx scripts]#

#------------------------------------------------------------------------------#
#说明
 #!/usr/bin/expect

 # 设置超时时间为 60 秒
 set timeout  60
 # 设置要登录的主机 IP 地址
 set host 192.168.15.52
 # 设置以什么名字的用户登录
 set name root
 # 设置用户名的登录密码
 set password dn3s
 #spawn 一个 ssh 登录进程
 spawn  ssh $host -l $name
 # 等待响应,第一次登录往往会提示是否永久保存 RSA 到本机的 know hosts 列表中;
 #等到回答后,在提示输出密码;之后就直接提示输入密码
 expect {
    "(yes/no)?" {
        send "yes\n"
        expect "Password:"
        send "$pasword\n"
    }
    "Password:" {
        send "$password\n"
    }
 }
 expect "#"
 # 下面测试是否登录到 $host
 send "uname\n"
 expect "Linux"
 send_user  "Now you can do some operation on this terminal\n"
 exit
#-----------------finish-------------------------------------------------#
#--实例1.2--expect交互式scp文件--------------by xuekun--------------------#
[xuekun@expect ~]$ cat scp.exp
#!/usr/expect/bin/expect
#modify by xk
#201105-30
#
set ADDR    [lindex $argv 0]   
set LOGIN   [lindex $argv 1]   
set PASSWD  [lindex $argv 2]   
set DIR     [lindex $argv 3]   
 
spawn scp -rp -P50718  "$DIR"  "$LOGIN@$ADDR:/tmp"   
set timeout 60   
 
expect {   
-re ".*es.*o.*" {   
exp_send "yes\r"   
exp_continue   
}   
-re ".*sword.*" {   
exp_send "$PASSWD\r"   
}   
}   
interact  
#--运行测试-------------------------------------------------------------------------------#
[xuekun@expect ~]$ /usr/expect/bin/expect scp.exp 192.168.15.52 root xuekun /home/xuekun/
说明:输入4个参数, $DIR 为要copy到远程服务器的目录或者文件
$LOGIN 为用户名, 通过expect 自动输入yes 和 password
#-----------------------------------------------------------------------------------------#
执行上面这个脚本的 sh脚本 代码如下:
#!/bin/sh   
/usr/bin/expect autocopy.exp 192.168.15.53 root 123456 /home/xuekun   
/usr/bin/expect autocopy.exp 192.168.15.54 root 123456 /home/xuekun   
/usr/bin/expect autocopy.exp 192.168.15.55 root 123456 /home/xuekun   
/usr/bin/expect autocopy.exp 192.168.15.56 root 123456 /home/xuekun  

只要 execute 上面这个 sh 脚本, 就可以批量完成数据的远程copy。
目录
相关文章
|
1月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
51 3
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
1月前
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
61 2
|
1月前
|
监控 虚拟化 云计算
从物理到云:使用自动化工具简化服务器迁移流程
【10月更文挑战第4天】随着云计算的快速发展,越来越多的企业选择将物理服务器迁移到云环境以提高效率和降低成本。本文详细介绍了使用自动化工具简化从物理到云的服务器迁移流程的技术实现细节,并提供了代码示例。
111 6
|
5天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
6天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
26 4
|
8天前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
1月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
63 9
|
1月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
1月前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。