批量推送公钥并且巡检服务器
说明:
这里是写了一个判断语句,首先判断是否本地存在秘钥目录,如果不存在就产生密钥对,并且将公钥信息进行推送到需要免密登录服务器中,当然,因为是脚本形式书写,所以这里所有的操作都是免交互进行,另外如果存在秘钥目录,这里可以做一个用户交互,询问用户需要远程到哪个服务器,直接帮用户远程,并查看服务器的硬件信息。但脚本中存在不足,必须执行两次,一次是检测目录不存在则生成密钥对,然后结束,然后再次执行脚本,才能免密巡检服务器。。。。
我这里只是写了一台服务器,如果公司有很多服务器也可以多写一个whil循环语句,也可以结合邮件服务器,将每天的巡检信息,发送到邮箱
#!/bin/bash
ip=10.0.0.
pass=123.com
if [ ! -d "/root/.ssh" ];then
ssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -qa|grep sshpass
if [ ! $? -eq 0 ];then
echo '请稍等,正在帮您安装sshpass软件包....'
/usr/bin/yum install -y sshpass &>/dev/null
echo '请再次执行脚本,帮您对服务器进行巡检,这次只是安装软件包哦~~~'
sleep 4
fi
for i in 7 8 ;
do
sshpass -p ${pass} ssh-copy-id -i /root/.ssh/id_rsa.pub -o stricthostkeychecking=no root@${ip}${i} &>/dev/null
done
else
cat <<EOF
+------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) db02 |
| 10) db03 |
| 11) db04 |
| 12) zabbix |
+------------------------+
EOF
t=`tty`
read -p "请输入需要巡检的服务器:" num
if [ $num -eq 3 ];then
cat <<EOF
------------------------------磁盘信息---------------------
EOF
ssh root@${ip}7 "df -h" >${t}
cat <<EOF
------------------------------内存信息---------------------
EOF
ssh root@${ip}7 "free -h" >${t}
cat <<EOF
------------------------------ssh 进程信息---------------------
EOF
ssh root@${ip}7 "ps -ef|grep [s]sh" >${t}
fi
fi
实验截图①
- 环境:未生成密钥对,没有/root/.ssh目录
- 结果:自动产生密钥对,并进行推送
实验截图②
- 环境:已经通过上次的脚本生成密钥对,并推送到免密登录服务器
- 结果:可直接对巡检结果查看