批量推送公钥并且巡检服务器

说明:

这里是写了一个判断语句,首先判断是否本地存在秘钥目录,如果不存在就产生密钥对,并且将公钥信息进行推送到需要免密登录服务器中,当然,因为是脚本形式书写,所以这里所有的操作都是免交互进行,另外如果存在秘钥目录,这里可以做一个用户交互,询问用户需要远程到哪个服务器,直接帮用户远程,并查看服务器的硬件信息。但脚本中存在不足,必须执行两次,一次是检测目录不存在则生成密钥对,然后结束,然后再次执行脚本,才能免密巡检服务器。。。。

我这里只是写了一台服务器,如果公司有很多服务器也可以多写一个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目录
  • 结果:自动产生密钥对,并进行推送

实验截图②

  • 环境:已经通过上次的脚本生成密钥对,并推送到免密登录服务器
  • 结果:可直接对巡检结果查看
原文地址:https://www.cnblogs.com/tcy1/p/12879037.html