今天公司同事要在一台伺服器上對另外兩台同機房的伺服器進行檔案傳輸,兩台伺服器的檔案存放地址一致,密碼和key也一致(我們公司在安全上做得有點變態的),為了效率寫了下面這個指令碼.
1.單台傳輸指令碼
cat /root/soft_shell/allscp.sh
複製代碼 代碼如下:
#!/usr/bin/expect
if {$argc < 2} {
send_user "usage: $argv0 src_file username ip dest_file password\n"
exit
}
##set key [lindex $argv 0]
set src_file [lindex $argv 0]
set username [lindex $argv 1]
set host_ip [lindex $argv 2]
set dest_file [lindex $argv 3]
set password [lindex $argv 4]
##spawn scp -i $key $src_file $username@$host_ip:$dest_file
spawn scp $src_file $username@$host_ip:$dest_file
expect {
"(yes/no)?"
{
send "yes\n"
expect "password:" {send "$password\n"}
}
"password:"
{
send "$password\n"
}
}
expect "100%"
expect eof
2.多台傳輸指令碼
cat /root/soft_shell/mainscp.sh
複製代碼 代碼如下:
#!/bin/bash
host_list="server_list.conf"
cat $host_list | while read line
do
host_ip=`echo $line|awk '{print $1}'`
username=`echo $line|awk '{print $2}'`
password=`echo $line|awk '{print $3}'`
src_file=`echo $line|awk '{print $4}'`
dest_file=`echo $line|awk '{print $5}'`
##key=`echo $line|awk '{print $6}'`
##./allscp.sh $key $src_file $username $host_ip $dest_file $password
./allscp.sh $src_file $username $host_ip $dest_file $password
done
3.伺服器資訊檔
複製代碼 代碼如下:
cat /root/soft_shell/server_list.conf
格式為:
複製代碼 代碼如下:
ip 使用者名稱 密碼 源檔案 目標檔案地址
ps:以上3個檔案,相信大家都看出來了,都是放在同一檔案夾下面的.我本地測試只用ssh密碼,沒有加上ssh key,如果要用上跟我們公司正式環境一樣的安全方式(ssh密碼+key,才能登入伺服器),那麼請自己修改指令檔,我比較懶這裡就不說得那麼詳細了.
最後來張效果圖吧,免得大家說我指令碼有問題.