ssh隧道连jenkins slave本质是master通过跳板机的2222端口安全连接内网物理机:一、准备跳板机并配置密钥认证;二、内网机用ssh -r反向映射22端口至跳板机2222端口;三、jenkins配置slave时主机填跳板机ip、端口2222,走隧道执行任务。

直接用 SSH 隧道连 Jenkins Slave 节点,本质不是“控制 Slave”,而是让 Jenkins Master 安全、稳定地连接到内网物理机(即作为 Slave)——关键在于绕过网络限制,同时不暴露内网服务。核心思路是:**Master 主动拉取任务,但连接通道由隧道保障**。下面分三步说清楚。
一、前提准备:确保内网物理机可被 SSH 访问
Jenkins Master 本身不能直连内网物理机,所以需要一个中间跳板机(或公网可访问的代理机),它既能被 Master SSH 连上,又能 SSH 进入内网物理机。
- 在跳板机上确认能
ssh user@内网物理机IP成功(比如ssh jenkins@192.168.5.10) - 内网物理机需安装 JDK 8+、SSH 服务(
sshd)、并创建专用用户(如jenkins),禁用密码登录,只用密钥认证 - 把 Jenkins Master 的公钥(
~/.ssh/id_rsa.pub)追加到内网物理机/home/jenkins/.ssh/authorized_keys中
二、建立安全隧道:用 SSH 远程端口转发(-R)打通链路
让内网物理机主动“反向”把 SSH 服务暴露给跳板机的一个端口,这样 Jenkins Master 就只需连跳板机的这个端口,就能穿透进内网物理机。
- 在内网物理机上执行(后台常驻):
ssh -fNT -R 2222:localhost:22 jenkins@跳板机IP -o "StrictHostKeyChecking=no" - 这表示:内网物理机把本地 22 端口,映射到跳板机的 2222 端口
- Jenkins Master 后续就通过
ssh jenkins@跳板机IP -p 2222登录到内网物理机,完全不碰内网IP - 建议加
autossh保活,防止断连:autossh -M 0 -fNT -R 2222:localhost:22 jenkins@跳板机IP
三、Jenkins 配置 Slave 节点(走隧道)
此时对 Jenkins 来说,“Slave”就是跳板机上的 2222 端口,背后实际是内网物理机。
- 安装必要插件:SSH Slaves Plugin 和 SSH Credentials Plugin
- 【系统管理】→【凭据】→添加新凭据:
类型选 SSH Username with private key,用户名填jenkins,私钥粘贴 Master 上的id_rsa内容 - 【节点管理】→新建节点:
启动方式选 Launch agents via SSH;
主机填 跳板机IP;
端口填 2222;
凭据选刚建好的那个;
远程工作目录填/home/jenkins/workspace(确保路径存在且有写权限) - 保存后点击节点名称 → 【Launch agent】,应显示在线
不复杂但容易忽略:隧道必须先跑起来,再配 Jenkins;Jenkins 不感知内网拓扑,只认“跳板机:2222”这个出口。所有构建日志、文件传输、命令执行,都经加密隧道完成,内网物理机零公网暴露。











