可批量获取JDK版本:脚本读取servers.txt中的服务器列表,通过免密SSH执行java -version并解析输出,按“IP/主机名 | JDK版本 | 状态”格式输出结果,支持重定向保存。

直接用 SSH 连接各服务器并执行 java -version 即可批量获取 JDK 版本,关键在于统一收集、解析和比对结果,避免手动登录逐台验证。
准备服务器列表和免密登录
把待检查的服务器 IP 或主机名写入文本文件(如 servers.txt),每行一个:
192.168.1.11
prod-app-01.example.com
确保当前机器能通过 SSH 免密登录所有目标服务器(配置好 SSH key)。这是脚本自动化的前提,否则每次连接都会卡在密码输入。
使用 Bash 脚本一键采集版本
保存以下脚本为 check_jdk.sh,赋予执行权限(chmod +x check_jdk.sh),然后运行:
脚本逻辑说明:
- 逐行读取
servers.txt中的地址 - 通过 SSH 执行
java -version 2>&1 | head -1获取第一行输出(含版本号) - 若连接失败或命令未返回有效输出,标记为“不可达”或“未安装”
- 结果按
IP/主机名 | JDK 版本 | 状态格式输出到终端,并可重定向保存
while IFS= read -r host; do
[ -z "$host" ] && continue
echo -n "$host | "
if output=$(ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" 'java -version 2>&1 | head -1' 2>/dev/null); then
if [[ $output =~ "version" ]]; then
echo "$output | OK"
else
echo "No Java output | Missing"
fi
else
echo "SSH failed | Unreachable"
fi
done
快速识别不一致或过期版本
采集完成后,可用简单命令筛选关键信息:
- 查看所有 OpenJDK 8:
grep "1\.8\." result.txt - 找出非 LTS 版本(如 17.0.1、21.0.2):
grep -E "(17\.|21\.)[^0-9]*[1345]" result.txt - 统计各版本分布:
awk -F'|' '{print $2}' result.txt | sort | uniq -c | sort -nr
注意:JDK 8u362+、11.0.20+、17.0.8+、21.0.2+ 是当前主流安全更新版本,旧小版本可能存在已知漏洞。
进阶建议:集成到巡检任务中
把脚本加入定时任务(如 cron),每天凌晨运行并邮件发送摘要;或接入轻量监控工具(如 Zabbix 的自定义脚本项),当检测到非预期版本时触发告警。也可将结果写入 CSV,供运维看板可视化展示版本合规率。

















