使用expect登陆定时复制文件脚本
运营需要在网站的首页添加行业资讯,以此来增加网站在百度的SEM权重值,开发人员解决方案是生产成首页,然后让我们运维复制到静态资源的服务器,我们使用云服务器没有相互互信,如果复制到其它主机就需要手工输入密码,我使用expect解决实现复制。
安装expect #yum install expect - y
脚本实现如下:
[yunweizhrt@VM_50_11_centos shelldir]$ more /home/shelldir/3wcn_scp.sh
#!/bin/bash
#
#####################################
#@brief 配置定时复制任务,每天9点启动
#@author xiajing
#@version 1.0
#@date 2020/04/01
#@log no
#####################################m
#shell Env
. /home/yunweizhrt/.bash_profile
file_date=`date '+%Y%m%d'`
echo $file_date
\cp -r /home/homepage/index.html /home/yunweizhrt/production/static.code/static/
host_ip_arr=( 10.38.38.27 )
host_pawd_arr=( 'U2FsdGVkX1/yTYCVGeefIlStRjcmQGOZEZro8Jj' )
for i in "${!host_ip_arr[@]}"
do
echo "$i" "===" "${host_ip_arr[$i]}"
echo "${host_pawd_arr[$i]}"
host_pawd=`echo ${host_pawd_arr[$i]} | openssl aes-128-cbc -d -k 123 -base64`
echo $host_pawd
/usr/bin/expect <<-EOF
set timeout -1
spawn scp -r -P 52113 /home/homepage/index.html yunwei@${host_ip_arr[i]}:/home/yunweizhrt/production/static.code/static/
expect {
"(yes/no)?" {
send "yes\n"
expect "*assword:" { send "${host_pawd}\n"}
}
"*assword:" {
send "${host_pawd}\n"
}
}
expect "100%"
expect eof
EOF
done
[yunweizhrt@VM_50_centos shelldir]$
脚本实现中不能使用明文密码,解决方案是先加密,在解密保存到变量;
[root@VM_33_centos shelldir]# echo "TRBUNGNZH2BSFP&82YTFKBANL#IT" |base64 -i
VFJCVU5HTlpIMkJTRk9DSyVQJjgyWVRGS0JBTkwjSVQK
[root@VM_33_centos shelldir]# echo "VFJCVU5HTlpIMkJTRk9DSyVQJjgRGS0JBTkwjSVQK" |base64 -d
TRBUNGNZH2BSFOCK%P&82YTFKBANL#IT
[root@VM_33_centos shelldir]# echo abc | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX1/yTYCVGeefIlStRjcmQGOZEZro8Jj/nOaw=
[root@VM_33_centos shelldir]# echo U2FsdGVkX1/yTYCVGeefIlStRjcmQGOZEZro8Jj/nOaw= | openssl aes-128-cbc -d -k 123 -base64
abc
[root@VM_33_centos shelldir]#
注释:脚本重要信息已经过处理