通过SSH连接本地Jenkins服务器获取bash权限报错如何解决
结论
你的需求是可实现的,报错shell request failed on channel 0是因为Jenkins内置SSH服务的鉴权逻辑和默认调用规则和普通SSH服务不同,按以下步骤配置即可:
1 确认基础配置生效
- 检查Jenkins SSH服务已正确开启:进入「Manage Jenkins」→「Security」→「SSH Server」页,确认端口配置为23,且配置保存后已重启Jenkins实例,端口正常监听。
- 确认本地可以正常访问Jenkins 8080端口,没有防火墙规则拦截23端口的本地请求。
2 配置用户鉴权信息
Jenkins内置SSH服务仅支持基于用户公钥的鉴权,不支持系统用户账号密码登录,需按以下配置:
- 本地未生成过SSH密钥对的话,执行
ssh-keygen -t ed25519,全程按回车使用默认配置即可。 - 进入Jenkins对应用户的配置页:点击右上角用户名→「Configure」,找到「SSH Public Keys」输入框,将本地
~/.ssh/id_ed25519.pub文件的全部内容粘贴进去,保存配置。
3 正确执行SSH连接命令
Jenkins默认不会直接返回交互shell,需要在SSH命令中指定Jenkins用户名、强制分配伪终端、明确调用bash命令,正确命令如下:
ssh -t <你的Jenkins登录用户名>@127.0.0.1 -p 23 bash
你之前的命令没有指定Jenkins用户名,会默认用本地系统用户名去匹配Jenkins用户,匹配失败就会触发shell请求失败的报错。
额外说明
之前jenkins-cli.jar仅返回有限命令的问题,是因为当前登录的Jenkins用户权限不足,给该用户分配「Overall/Administer」全局权限后即可看到完整命令列表。
你通过该方式获取的bash环境,就是Jenkins运行用户的系统环境,和实际构建任务的运行环境一致,可直接用于构建脚本测试。如果需要模拟特定构建节点的环境,可在上述bash中执行node <节点名>命令切换到对应节点环境。
内容的提问来源于stack exchange,提问作者Mu'men Tayyem
相关产品推荐
相关产品推荐

