Rundeck v4.1.2 Docker部署SSH私钥认证节点连接失败求助
Rundeck 4.1.2 Docker部署节点SSH私钥认证失败排查
按优先级依次检查以下遗漏配置项,覆盖90%以上同场景报错:
- 私钥格式不兼容
Rundeck 4.1.x默认内置的JSch SSH组件不支持新版OpenSSH格式私钥(文件头为-----BEGIN OPENSSH PRIVATE KEY-----),仅兼容传统PEM格式RSA私钥(文件头为-----BEGIN RSA PRIVATE KEY-----)。本地命令行可正常连接是因为系统自带OpenSSH客户端同时兼容两种格式,JSch读取新格式私钥时会直接返回认证失败,不会明确报格式错误。
修复方法:本地执行ssh-keygen -p -m PEM -f <你的私钥本地存储路径>将私钥转换为PEM格式,删除Key Storage中原有旧私钥,重新上传转换后的私钥到keys/test路径即可。 - 节点配置属性名、枚举值写错
你当前的节点配置中两个关键属性不符合SSH插件识别规则:- 私钥存储路径属性名错误:插件不识别
ssh-privateKey-storage-path,正确属性名为ssh-keypath - 认证方式枚举值大小写错误:
ssh-authentication的合法值为全小写的privatekey,大写K的privateKey无法被插件识别,会回退到默认认证逻辑
修正后的节点配置参考:
server18: nodename: server18 hostname: server18.rc-group.local osVersion: 18.04 osFamily: unix osArch: amd64 description: target-test osName: Ubuntu username: rundeck ssh-authentication: privatekey ssh-keypath: keys/test - 私钥存储路径属性名错误:插件不识别
- 容器内SSH主机指纹未信任
你本地命令行连接时已经将目标节点的主机指纹存入本地known_hosts文件,但Rundeck运行在Docker容器中,容器内rundeck用户的~/.ssh/known_hosts默认是空的,JSch组件在未配置自动接受未知主机密钥时,会因主机指纹校验失败直接抛出通用认证失败报错,不会明确提示主机密钥不匹配。
修复方法二选一:- 测试环境可直接在项目配置文件
project.properties中添加两行配置,关闭严格主机密钥校验:service.NodeExecutor.ssh-accept-unknown-hosts=true service.FileCopier.ssh-accept-unknown-hosts=true - 生产环境建议进入运行中的Rundeck容器,切换到rundeck用户手动执行一次
ssh rundeck@server18.rc-group.local,按提示接受目标节点主机指纹,注意要将容器内/home/rundeck/.ssh/known_hosts路径挂载到宿主机持久化,避免容器重建后配置丢失。
- 测试环境可直接在项目配置文件
- 容器内SSH相关文件权限不符合要求
SSH客户端要求私钥、known_hosts等文件权限必须为600,且所属用户为当前执行用户,否则会直接拒绝读取文件导致认证失败。进入容器执行以下命令校验、修正权限即可:chmod 600 /home/rundeck/.ssh/* chown -R rundeck:rundeck /home/rundeck/.ssh/
内容的提问来源于stack exchange,提问作者GI D
相关产品推荐
相关产品推荐

