You need to enable JavaScript to run this app. 求可部署于Rundeck、支持登录EC2查询磁盘与Java版本的bash脚本
优惠活动
大模型
产品
解决方案
定价
更多

求可部署于Rundeck、支持登录EC2查询磁盘与Java版本的bash脚本

适用于Rundeck的EC2批量巡检Bash脚本

功能说明

  • 支持批量登录EC2实例,支持按实例ID或标签筛选目标实例,适配万级实例规模的执行需求
  • 自动采集并返回目标实例的df -h磁盘挂载结果、lsblk块设备信息、Java版本信息
  • 自带异常捕获逻辑,单台实例连接失败不会中断整体任务,错误信息会明确标注对应实例ID和IP

前置依赖

  • Rundeck服务节点已安装AWS CLI v2,绑定的IAM角色拥有EC2实例查询权限
  • 所有目标EC2实例已放通Rundeck节点的SSH访问权限,Rundeck已存储对应SSH登录私钥
  • 目标实例的默认登录用户统一(默认使用ec2-user,可根据实际业务修改为ubuntu/root等)

完整脚本代码

#!/bin/bash
# 可根据实际业务修改以下默认配置
SSH_USER="ec2-user"
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10 -o BatchMode=yes"
# 支持两种筛选方式:1. 传入空格分隔的实例ID 2. 传入AWS标签筛选规则(优先级高于实例ID)
if [[ -n "${EC2_TAG_FILTER:-}" ]]; then
    INSTANCE_LIST=$(aws ec2 describe-instances \
        --filters "Name=instance-state-name,Values=running" \
        --filters "${EC2_TAG_FILTER}" \
        --query 'Reservations[*].Instances[*].[InstanceId,PrivateIpAddress]' \
        --output text)
elif [[ -n "${EC2_INSTANCE_IDS:-}" ]]; then
    INSTANCE_LIST=$(aws ec2 describe-instances \
        --filters "Name=instance-state-name,Values=running" \
        --instance-ids ${EC2_INSTANCE_IDS} \
        --query 'Reservations[*].Instances[*].[InstanceId,PrivateIpAddress]' \
        --output text)
else
    echo "ERROR: 请传入EC2_TAG_FILTER或EC2_INSTANCE_IDS参数指定目标实例"
    exit 1
fi
# 批量执行巡检命令
echo "${INSTANCE_LIST}" | while read INSTANCE_ID PRIVATE_IP; do
    echo -e "\n====================================="
    echo "实例ID: ${INSTANCE_ID} | 私有IP: ${PRIVATE_IP}"
    echo "====================================="
    ssh ${SSH_OPTS} ${SSH_USER}@${PRIVATE_IP} << 'REMOTE_CMD'
echo ">>> 磁盘挂载信息(df -h):"
df -h
echo -e "\n>>> 块设备信息(lsblk):"
lsblk
echo -e "\n>>> Java版本信息:"
if command -v java &> /dev/null; then
    java -version 2>&1
else
    echo "Java 未在当前实例安装"
fi
REMOTE_CMD
    # 捕获SSH执行异常
    if [[ $? -ne 0 ]]; then
        echo "ERROR: 实例 ${INSTANCE_ID} 连接/执行失败,请检查网络、SSH配置或实例运行状态"
    fi
done

Rundeck部署配置步骤

  • 新建Rundeck作业,执行节点选择部署了AWS CLI的Rundeck服务节点
  • 配置作业参数:添加两个可选字符串参数,参数名分别为EC2_INSTANCE_IDS(传入空格分隔的实例ID)、EC2_TAG_FILTER(传入AWS标签筛选规则,示例:Key=app,Values=payment)
  • 配置SSH权限:将对应EC2的SSH登录私钥关联到作业的SSH认证配置,填写对应登录用户名
  • 优化执行性能:万级实例场景下建议开启并行执行,并行度设置为50~100(根据Rundeck节点性能调整),避免单次任务执行时间过长

内容的提问来源于stack exchange,提问作者Shubham Malve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 22:36:03