1.生成SSH密钥对
使用SSH密钥进行免密登录是推荐的做法,因为它避免了在脚本中硬编码账号密码,减少了密码泄露的风险。使用SSH密钥进行免密登录是推荐的做法,因为它避免了在脚本中硬编码账号密码,减少了密码泄露的风险。首先,我们使用ssh-keygen
命令生成SSH密钥对。通过生成密钥对,我们可以实现免密登录,提高安全性并简化登录流程。
ssh-keygen
2.复制公钥到目标服务器
接下来,使用ssh-copy-id命令将公钥复制到需要免密登录的目标服务器。确保目标服务器的PubkeyAuthentication设置为yes,以启用公钥认证方法。
3.编写可维护脚本
在每个服务器上编写巡检脚本,确保它们易于调整和修改。使用变量和模块化设计来增强脚本的可移植性和可维护性
巡检脚本如下:
#!/bin/bash
local_date=$(date "+%Y年%m月%d日%H:%M:%S")
date=$(date "+%Y年%m月%d日")
echo "A服务器巡检结果,巡检时间为$local_date" >>A服务器巡检结果${date}.txt
echo "================CPU使用情况==================="
usedcpu=$(vmstat|awk '{if (NR==3)print 100-$15}')
IOwait=$(vmstat|awk '{if (NR==3)print $16}')
echo "cpu使用率$usedcpu%,IO等待响应$IOwait%" >>A服务器巡检结果${date}.txt
echo "================内存使用情况==================="
mem=$(free -h |grep Mem |awk '{print $2}')
free=$(free -h |grep Mem |awk '{print $4}')
used=$(free -h |grep Mem |awk '{print $3}')
usage_rate=$(echo "scale=2; $(echo $used | grep -oE '[0-9.]+') / $(echo $mem | grep -oE '[0-9.]+') * 100" | bc)
echo "总内存为 $mem ,已使用$used ,剩余$free,内存使用率$usage_rate%" >>A服务器巡检结果${date}.txt
echo "================磁盘使用情况==================="
disk=`df -h |grep ^/dev`
echo "磁盘使用情况如下:
$disk" >>A服务器巡检结果${date}.txt
4.提取巡检报告
编写一个中央控制脚本(假设为integration_script.sh),用于从多个服务器提取巡检报告。使用SSH密钥免密登录来执行远程脚本,并将输出重定向到本地文件。这样可以避免在远程调用代码时出现解析错误,从而导致不可预知的错误。
#!/bin/bash
date=$(date "+%Y年%m月%d日")
cat /opt/A服务器巡检结果${date}.txt >>/opt/服务器整体巡检结果${date}.txt
ssh -Tq [email protected] <<EOF >>/opt/服务器整体巡检结果${date}.txt #-Tq为分配客户端且静默执行,防止报错
date=$(date "+%Y年%m月%d日")
cat /opt/B服务器巡检结果${date}.txt
EOF
执行整合脚本后,我们可以看到两台服务器巡检报告已归纳到一起
当然也可以对其优化,使用for循环
#!/bin/bash
# 设置日期格式
date_str=$(date "+%Y年%m月%d日")
host_name=$(hostname)
combine="/opt/服务器整体巡检结果${date_str}.txt"
# 服务器列表
server_list=( "192.168.2.128" "192.168.2.129")
for server in "${server_list[@]}"; do
echo "开始收集${server}的巡检结果..."
ssh -Tq root@$server <<EOF >>$combine
cat /opt/servercheck${date_str}.txt
EOF
if [ $? -eq 0 ]; then
echo "成功收集${server}的巡检结果"
else
echo "收集${server}的巡检结果失败" >> "/opt/fail${date_str}.log"
fi
done
#自身服务器巡检
echo "自身服务开始巡检"
cat /opt/servercheck${date_str}.txt >>$combine
echo "所有服务器的巡检结果已收集完毕,并保存在$combine中。"
5.开启定时任务
最后,在本地服务器上设置定时任务,定期执行整合脚本
crontab -e
0 1 * * * /path/to/your/integration_script.sh
原文始发于微信公众号(网络个人修炼):使用SSH密钥免密登录进行多服务器巡检
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论