标签:
shell尽管很强大。但是貌似无法完成交互式命令的操作,实例 ssh host 如果host而且该机没有加入信任。手动输入的时间需要password。
这样的情况下可以使用expect支持。
下面举个样例来说明expect的功能与使用:
功能:对集群各机器运行同样指令 如 集群ip 为 :192.168.6.1~192.168.6.10。须要在这10台机器上 同一时候 以tt用户登录 并运行 mkdir ttji_314命令。
首先 定义一个hostlist文件 :
192.168.6.1 192.168.6.2 192.168.6.3 192.168.6.4 192.168.6.5 192.168.6.6 192.168.6.7 192.168.6.8 192.168.6.9 192.168.6.10
然后定义一个 expect脚本 完毕在单个机器运行命令:ssh_comm.sh
#!/usr/bin/expect set host [lindex $argv 0] set command [lindex $argv 1] set password 123456 set username tt set timeout 1 send_user "connect to $host ...\n" spawn ssh -l $username $host expect "password:" send "$password\r" expect "#$" send "$command\r" expect "#$" send "exit\r" #interact expect eof
几点说明 :
1 首行加上/usr/bin/expect
#!/bin/bash function use() { echo "========================" echo "./command_all.sh hostlist command" echo "========================" } if [ $# != 2 ] then use else echo "welcome to use:\n" fi file=$1 command=$2 echo $file echo $command while read line do #echo $line ./ssh_comm.sh $line "$command" done < $file
有个问题:当在expect脚本中 使用root用户登录的时候 似乎没有timeout这样的概念 ,运行完命令马上返回;
而用普通用户才会有这样的体现。
若有了解的同学请留言不吝赐教,不胜感激~
版权声明:本文博主原创文章,博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/lcchuguo/p/4840715.html