在做批量分发的时候第一次是两个脚本来完成,后来做了一个expect嵌套,完成了一个脚本进行集成

前提要求服务器需要安装expect

[root@130 scripts]# yum -y install expect

脚本分析:

#!/bin/bash
key_file='/root/.ssh/id_dsa'

####################### 判断秘钥文件是否存在 ######################
[ -f $key_file ] || ssh-keygen -t dsa -P '' -f $key_file > /dev/null 2>&1

####################### 批量分发秘钥 #########################
for ip in {128..140}       
do
/usr/bin/expect  << EOF > /dev/null 2>&1
spawn  ssh-copy-id -i $key_file "-p 22 root@192.168.222.$ip"
expect {
        "yes/no"        {send "yes\r";exp_continue}
        "*password"     {send "root\r"}
}
expect eof
EOF

####################### 显示分发状态 ##########################
if [ $? -eq 0 ]
        then
echo "192.168.222.$ip 秘钥分发成功"
#echo 0
        else
echo "192.168.222.$ip 秘钥分发失败"
#echo 1
fi
done

脚本效果实现效果:

[root@130 scripts]# ./send_file 
192.168.222.128 秘钥分发失败
192.168.222.129 秘钥分发失败
192.168.222.130 秘钥分发成功
192.168.222.131 秘钥分发成功
192.168.222.132 秘钥分发成功
192.168.222.133 秘钥分发失败
192.168.222.134 秘钥分发失败
192.168.222.135 秘钥分发成功
192.168.222.136 秘钥分发失败
192.168.222.137 秘钥分发失败
192.168.222.138 秘钥分发失败
192.168.222.139 秘钥分发失败
192.168.222.140 秘钥分发失败

案例:

从Linux将禅道数据进行打包定期备份到Windows备份服务器中

Linux与windows之间SSH协议,需要windows安装BvSshServer,2008R2制作秘钥信任一直失败,干脆用expect的方式,也作为一个案例,但这个脚本并不完善,缺乏周期删除,以及密码验证失败邮件告知,作为后期完善

#!/bin/sh
bk_path=/opt/zbox_backup

/bin/tar zcvf ${bk_path}/zbox_$(date +%F).tar.gz /opt/zbox > /dev/null 2>&1        ##打包

if [ $? -eq 0 ];then
        /usr/bin/expect  << EOF > /dev/null 2>&1            ##由于没有在2008R2上制作SSH秘钥信任失败,暂时通过expect自动化交互的方式输入密码,达到自动登录上传功能
        spawn /usr/bin/scp ${bk_path}/zbox_$(date +%F).tar.gz svn@172.18.0.100:/e:/ZenTao/
        expect {
        "*password"     {send "rxadmin123\r"}
        }
        expect eof
EOF
else
echo "禅道备份失败 172.18.0.15" | mail -s 禅道备份失败 xxxxxxxx@qq.com
fi



!!!显示分发成功的服务器就可以直接无密码在服务器上进行登陆了