在做批量分发的时候第一次是两个脚本来完成,后来做了一个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
!!!显示分发成功的服务器就可以直接无密码在服务器上进行登陆了