以下脚本可实现复制本地脚本到多台远程主机,并执行此脚本。

#!/bin/bash
# 主机列表
SERVERS="172.22.101.101 172.22.101.102"
# 主机登录密码
PASSWORD="123456\;q"
# 本地脚本,将该脚本复制到远程主机
LOCALSHELL=/root/test.sh


# 将本地脚本复制到远程主机
copy_file(){
    expect -c "set timeout -1;
        spawn scp $3 root@$1:/root/;
        expect {
            *(yes/no)* {send -- yes\r;exp_continue;}
            *assword:* {send -- $2\r;exp_continue;}
            eof        {exit 0;}
        } 
        chmod 77 $3";
}

#在远程主机上执行脚本

execute_sh(){
    expect -c "set timeout -1;
            spawn ssh root@$1 $3
                expect {
                        *(yes/no)*  {send -- yes\r;exp_continue;}
                        *password:* {send -- $2\r;exp_continue;}
                        eof         {exit 0;}
                }";
}


#遍历 将ssh复制到远程主机并执行
for SERVER in $SERVERS
do
    copy_file $SERVER $PASSWORD $LOCALSHELL
    execute_sh $SERVER $PASSWORD  $LOCALSHELL
done