#!/bin/bash
length=$(cat ~/ip.txt | wc -l)
for((i=1;i<=$length;i++));
do
echo "Schedule:$i/$length"
mg_ip=$(awk "NR==$i {print $"1"}" ~/ip.txt)
user=$(awk "NR==$i{print $"2"}" ~/ip.txt)
password1=$(awk "NR==$i{print $"3"}" ~/ip.txt)
password2=$(awk "NR==$i{print $"4"}" ~/ip.txt)
echo "$mg_ip is being executing!"
# echo $yw_ip
expect <<!!
set timeout 10
spawn ssh -o StrictHostKeyChecking=no $user@$mg_ip
expect "Password"
send "$password1\r"
expect "$user@"
send "su - root\r"
expect "Password"
send "$password2\r"
expect "#"
send "scp -o StrictHostKeyChecking=no /etc/sysconfig/network/ifcfg-eth0 root@192.168.100.11:/root/$mg_ip \r "
expect "Password"
send "$password2\r"
# send "rm -rf ~/filename \r"
# sleep 1
expect "100%"
send "exit \r"
expect "$user@"
send "exit \r"
expect eof
!!
done
说明:需要创建~/ip.txt 分4列记录: ip 、登录普通用户、普通用户密码、root用户密码。需要遇到问题,使用expect -d进行debug
将此处的expect修改为expect -d
如果仅需要scp拷贝文件,也可以直接spawn scp。
expect中好像不能存在多个spawn,尝试多个spawn调用都没成功,可能是多个spawn进程 send发送内容不知道往哪个进程发。