Jenkins代理节点通过SSH免密连接需四步:生成专用ed25519密钥并加约束命令;选用SSH启动替代弃用JNLP;配置反向审计(存活感知+集中日志+健康检查);加固权限与可观测性(禁密码登录、最小权限、Prometheus监控)。

Jenkins 代理节点(Agent)通过 SSH 免密连接拉起,核心在于让主控端(Controller)能无交互、可审计、可复位地建立并维持与 Agent 的安全通道。这不是单纯配个密钥就完事,而是涉及密钥管理、连接策略、启动方式、日志留存和状态回传四个关键环节。
生成并分发专用 SSH 密钥对
避免复用 root 或 Jenkins 用户已有密钥,应为 Agent 连接创建专用密钥:
- 在 Jenkins Controller 主机上执行:
ssh-keygen -t ed25519 -f /var/lib/jenkins/.ssh/agent_id_ed25519 -N "" -C "jenkins-agent@$(hostname)"(推荐 ed25519,比 RSA 更快更安全) - 将公钥内容(
/var/lib/jenkins/.ssh/agent_id_ed25519.pub)追加到目标 Agent 机器对应用户的~/.ssh/authorized_keys中 - 在
authorized_keys行末添加强制约束,例如:command="echo 'SSH agent session'; /bin/bash -l",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAA... jenkins-agent@controller
这样既限制了该密钥仅用于启动 shell,又禁用了不必要功能,提升安全性
使用 SSH 启动方式替代 JNLP(推荐)
JNLP 模式依赖 Java Web Start,已弃用且难以审计;SSH 启动方式由 Controller 主动发起连接,全程可控、可记录、可超时中断:
- 在 Jenkins 管理界面:节点配置 → Launch method → 选择 Launch agent via SSH
- Host 填写 Agent 机器 IP 或域名,Credentials 选择刚配置的密钥凭证(Jenkins 凭据管理中已导入
agent_id_ed25519私钥) - Remote root directory 建议设为
/var/jenkins_agent(非家目录),确保权限隔离 - 勾选 Verify Host Key 并填入 Agent 的 SSH host key(可通过
ssh-keyscan -t ecdsa,ed25519 ip提前获取),防止中间人攻击
启用反向状态审计能力
所谓“反向审计”,是指 Controller 不仅能拉起 Agent,还能持续感知其存活、资源、连接质量,并在异常时自动记录上下文:
- 在 Agent 配置中启用 Availability → Keep this agent online as much as possible,并设置合理的 Retry count 和 Retry interval
- 配合系统级日志采集:在 Agent 机器上配置
rsyslog将sshd认证日志(/var/log/secure或/var/log/auth.log)按规则转发至集中日志平台,含时间、用户、IP、密钥指纹、结果等字段 - Jenkins 自身日志(
$JENKINS_HOME/logs/slaves/<agent-name>/)会记录每次连接尝试、断连原因、重连耗时,可用于分析稳定性 - 可编写轻量级健康检查脚本(如检测
java -version、磁盘空间、systemctl is-active jenkins-agent),通过Execute shell script on remote host插件定期调用并写入构建日志
加固与可观测性补充建议
平滑运行离不开底层加固和可观测支撑:
- Agent 机器禁用密码登录:
PasswordAuthentication no,仅保留密钥认证 - 为 Jenkins Agent 用户配置最小权限:不加入 sudoers,仅赋予所需目录读写权限(如
/var/jenkins_agent/workspace) - 在 Controller 上启用 SSH Server for CLI(系统配置 → Security → Enable SSH server),允许运维人员用相同密钥直接
ssh -p <port> jenkins@controller查看节点状态、触发诊断命令 - 结合 Prometheus + Node Exporter + Jenkins Metrics Plugin,暴露 Agent CPU、内存、连接数、空闲 executor 数等指标,实现主动预警


















