一、編寫一個shell腳本,內部使用expect+spawn實現遠程登陸和操作其他主機的功能。
#從文件列表中獲取ip,挨個處理
cat $ip_path_file | while read line
do
ip_addr=$line
#上傳文件到指定目錄下
scp $shell_script $user_name@$ip_addr:$user_dir
#進入目標主機操作
deal_script $ip_addr
done
function deal_script()
{
my_ip_addr=$1
#先打包,再scp
expect <<-EOF
set timeout -1
spawn ssh $my_ip_addr
expect "]*"
send "sudo -i \r"
expect "]*"
send "cp $shell_script ${shell_dir}/ \r"
expect "]*"
send "cd ${shell_dir} \r"
expect "]*"
send "chown root:root $shell_script_file_name \r"
expect "]*"
send "nohup sh $shell_script_file_name $shell_params $my_ip_addr > /dev/null 2>&1 & \r"
expect "]*"
send "exit\r"
expect "]*"
send "exit\r"
expect eof
EOF
}
此功能包含了遠程登陸、拷貝程序或腳本到遠程主機上、賦權、后臺啟動程序或腳本、最后退出。
二、詳細說明
1、shell發布腳本程序:負責讀取mysql數據表,然后與各個需要發布的主機交互,異步發布程序、執行程序、獲取發布和執行結果,根據seq_id登記最終執行結果,最后查看數據庫中的表即可知道發布和執行結果;
2、expect模塊功能:expect是一個自動化交互套件,主要應用于執行命令和程序時,系統以交互形式要求輸入指定字符串,實現交互通信,用于主主機與其他主機遠程交互的中間命令;
3、ip列表ip_path_file 可以存放在本地文件中。