配置Jenkins EC2插件使用EC2从节点公网IP解决SSH连接超时问题
Jenkins本地主节点连接EC2从节点超时问题
问题描述
本地部署的Jenkins主节点,使用EC2 Plugin按需创建AWS EC2从节点,计划通过SSH实现主从连接。手动通过从节点公网IP可正常SSH登录,但Jenkins自动连接时超时,日志信息如下:
INFO: Connecting to 172.31.44.131 on port 22, with timeout 10000.
Nov 06, 2024 9:58:55 AM hudson.plugins.ec2.EC2Cloud
INFO: Failed to connect via ssh: The kexTimeout (10000 ms) expired.
Nov 06, 2024 9:58:55 AM hudson.plugins.ec2.EC2Cloud
诊断确认:Jenkins默认采用EC2从节点的私网IP发起连接,但本地主节点处于AWS网络外部,无法访问私网IP,最终导致连接超时。已验证公网IP手动SSH可行,暂未找到EC2 Plugin中强制使用公网IP的直接选项。
解决方案
方案一:配置EC2 Plugin使用公网IP连接
更新EC2云节点配置
- 进入Jenkins管理界面,依次打开「管理Jenkins」→「管理节点和云」→「配置云」,找到对应EC2云的配置项。
- 在「实例配置」区域,找到「连接策略」(Connection Strategy)选项,选择
Public IP(部分版本显示为Use Public IP)。若找不到该选项,先升级EC2 Plugin到最新版本,旧版本可能未提供此设置。 - 若插件版本不支持直接选择公网IP,可在实例模板的「SSH启动器」配置中,将「主机」字段设置为变量
${EC2_PUBLIC_IP},该变量会自动拉取实例的公网IP地址。
验证基础配置
- 确保EC2实例模板绑定的SSH密钥对,本地主节点持有对应私钥;同时EC2实例的安全组已开放22端口,允许本地主节点的公网IP访问。
方案二:让本地主节点访问EC2私网IP(适合需私网访问的场景)
若必须通过私网IP连接,可采用以下两种方式:
- 搭建AWS站点到站点VPN
- 在AWS配置虚拟专用网关(Virtual Private Gateway),将本地网络与AWS VPC建立站点到站点VPN连接,完成路由配置后,本地主节点即可直接访问EC2实例的私网IP。
- 跳板机端口转发(临时方案)
- 启动一台带公网IP的EC2实例作为跳板机,在本地主节点上配置SSH隧道转发流量:
ssh -i "跳板机密钥文件.pem" -L 2222:目标从节点私网IP:22 ec2-user@跳板机公网IP - 随后在Jenkins的SSH配置中,将主机设为
localhost、端口设为2222即可,但此方式仅适合临时测试,不建议用于生产环境。
- 启动一台带公网IP的EC2实例作为跳板机,在本地主节点上配置SSH隧道转发流量:
内容的提问来源于stack exchange,提问作者Riccardo
相关产品推荐
相关产品推荐

