前言:上一篇讲了cobbler,这篇来讲下expect。以前分发文件的时候都是用for循环依次去读ip。当然前提你还得先把ssh通道打通。虽然说expect不用提前做什么准备工作,只需要写两个脚本即可。但是个人认为没有ssh安全。因为使用expect的时候你得先把你的账户写到一个文件里面。且都是明文存储。至于能否加密什么的有待研究。而ssh大家都知道,互换秘钥相对来说安全一点。好了,不多说。来看看它具体应用吧。
#1 安装
[[email protected] ~]# yum install expect -y
#2 使用之命令执行
分两个步骤:
@1使用for循环读取服务器IP、密码列表并取值
@2命令执行
列:在两台服务器上执行"mkdir -p /tmp/`date +%Y%m%d`"
首先创建一个登陆脚本。
[[email protected] ~]# vim login.exp
#!/usr/bin/expect -f set ip [lindex $argv 0 ] set passwd [lindex $argv 1 ] set command [lindex $argv 2] set timeout 1 spawn ssh [email protected]$ip expect { "yes/no" { send "yes\r";exp_continue } "password:" { send "$passwd\r" } } expect "*#*" { send "$command\r" } expect eof
然后创建一个执行脚本。
[[email protected] ~]# vim exec.sh
#!/bin/sh CMD="$*" for i in `awk ‘{print $1}‘ passwd.txt` do j=`awk -v I="$i" ‘{if(I==$1)print $2}‘ passwd.txt` expect login.exp $i $j "$CMD" done
建立账户文件。(格式:IP 密码 中间加空格)
[[email protected] ~]# cat passwd.txt 192.168.175.128 123456xx 192.168.175.129 123456xx [[email protected] ~]#
来测试下:
[[email protected] ~]# [[email protected] ~]# /bin/sh exec.sh "mkdir -p /tmp/`date +%Y%m%d`" spawn ssh [email protected] [email protected]‘s password: Last login: Fri Dec 19 13:56:07 2014 from 192.168.175.130 [[email protected] ~]# mkdir -p /tmp/20141219 [[email protected] ~]# [[email protected] ~]#
验证一下。
[[email protected] ~]# ifconfig eth0 | awk ‘/inet addr/ {print $2}‘ | cut -f2 -d ":" 192.168.175.128 [[email protected] ~]# ls /tmp 20141219 orbit-root pulse-eQxFW8on4dad virtual-root.aBsUjs virtual-root.DsVJFE vmware-root keyring-e1rFbt pulse-dVLX9iw0mWPw ssh-YVWNES1756 virtual-root.cDhcQC virtual-root.S5Y5rX yum.log [[email protected] ~]#
#3 使用之文件传输
同上。只不过需要修改两个脚本中的相关参数变量。
登录脚本(login.scp)。
#!/usr/bin/expect -f set ip [lindex $argv 0 ] set passwd [lindex $argv 1 ] set src_file [lindex $argv 2] set des_dir [lindex $argv 3] set timeout 1 spawn scp -r $src_file [email protected]$ip:$des_dir expect { "yes/no" { send "yes\r";exp_continue } "password:" { send "$passwd\r" } } expect "#*" expect eof
传输脚本(send.sh)。
#!/bin/sh read -p "Please Enter insert Source File or DIR: " src_file echo ====================================================== sleep 1 read -p "Please Enter insert Destination DIR: " des_dir for i in `awk ‘{print $1}‘ passwd.txt` do j=`awk -v I="$i" ‘{if(I==$1)print $2}‘ passwd.txt` expect login.scp $i $j $src_file $des_dir done
账户文件(passwd.txt)保持不变。
然后来测试。
[[email protected] ~]# echo "Sx4MK 20141219" > test.txt [[email protected] ~]# /bin/sh send.sh test.txt /root spawn scp -r test.txt [email protected]:/root [email protected]‘s password: test.txt 100% 15 0.0KB/s 00:00 [[email protected] ~]#
验证一下。
[[email protected] ~]# ls anaconda-ks.cfg install.log install.log.syslog test.txt 公共的 模板 视频 图片 文档 下载 音乐 桌面 [[email protected] ~]# cat test.txt Sx4MK 20141219 [[email protected] ~]# ifconfig eth0 | awk ‘/inet addr/ {print $2}‘ | cut -f2 -d ":" 192.168.175.128 [[email protected] ~]#
时间: 2024-10-10 23:37:15