使用SSH密钥免密登录进行多服务器巡检

admin 2024年9月13日17:47:35评论19 views字数 2174阅读7分14秒阅读模式
在自动化运维中,定期巡检服务器状态是非常重要的。为了提高安全性和效率,我们可以使用SSH密钥进行免密登录,并通过脚本自动化地收集各服务器的巡检报告。以下是实现这一过程的详细步骤:

1.生成SSH密钥对

使用SSH密钥进行免密登录是推荐的做法,因为它避免了在脚本中硬编码账号密码,减少了密码泄露的风险。使用SSH密钥进行免密登录是推荐的做法,因为它避免了在脚本中硬编码账号密码,减少了密码泄露的风险。首先,我们使用ssh-keygen命令生成SSH密钥对。通过生成密钥对,我们可以实现免密登录,提高安全性并简化登录流程。

ssh-keygen

使用SSH密钥免密登录进行多服务器巡检

2.复制公钥到目标服务器

接下来,使用ssh-copy-id命令将公钥复制到需要免密登录的目标服务器。确保目标服务器的PubkeyAuthentication设置为yes,以启用公钥认证方法。

使用SSH密钥免密登录进行多服务器巡检

使用SSH密钥免密登录进行多服务器巡检

3.编写可维护脚本

在每个服务器上编写巡检脚本,确保它们易于调整和修改。使用变量和模块化设计来增强脚本的可移植性和可维护性

巡检脚本如下

#!/bin/bashlocal_date=$(date "+%Y年%m月%d日%H:%M:%S")date=$(date "+%Y年%m月%d日")echo "A服务器巡检结果,巡检时间为$local_date"  >>A服务器巡检结果${date}.txtecho "================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}.txtecho "================内存使用情况==================="  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}.txtecho "================磁盘使用情况===================" disk=`df -h |grep ^/dev`echo "磁盘使用情况如下:$disk"  >>A服务器巡检结果${date}.txt

4.提取巡检报告

编写一个中央控制脚本(假设为integration_script.sh),用于从多个服务器提取巡检报告。使用SSH密钥免密登录来执行远程脚本,并将输出重定向到本地文件。这样可以避免在远程调用代码时出现解析错误,从而导致不可预知的错误。

#!/bin/bashdate=$(date "+%Y年%m月%d日")cat /opt/A服务器巡检结果${date}.txt  >>/opt/服务器整体巡检结果${date}.txtssh -Tq [email protected] <<EOF >>/opt/服务器整体巡检结果${date}.txt #-Tq为分配客户端且静默执行,防止报错date=$(date "+%Y年%m月%d日")cat /opt/B服务器巡检结果${date}.txtEOF

执行整合脚本后,我们可以看到两台服务器巡检报告已归纳到一起

使用SSH密钥免密登录进行多服务器巡检

当然也可以对其优化,使用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}.txtEOF    if [ $? -eq 0 ]; then        echo "成功收集${server}的巡检结果"     else        echo "收集${server}的巡检结果失败" >> "/opt/fail${date_str}.log"    fidone#自身服务器巡检echo "自身服务开始巡检"cat /opt/servercheck${date_str}.txt  >>$combineecho "所有服务器的巡检结果已收集完毕,并保存在$combine中。"

5.开启定时任务

最后,在本地服务器上设置定时任务,定期执行整合脚本

crontab -e0 1 * * * /path/to/your/integration_script.sh

原文始发于微信公众号(网络个人修炼):使用SSH密钥免密登录进行多服务器巡检

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月13日17:47:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用SSH密钥免密登录进行多服务器巡检https://cn-sec.com/archives/3153448.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息