Jenkins调用Git中脚本执行SSH命令失败问题求助
问题场景:Git仓库中存储了名为Job.sh的Shell脚本,内容如下:
echo "Warehouse script starting" ssh -n username@server_name "mkdir -p ~/directory_name/folder_name/file_name"在Jenkins的Execute Shell步骤中执行
sh job.sh,echo命令可正常输出至控制台,但SSH远程登录并创建目录的操作未执行。
排查与解决建议
验证Jenkins运行用户的SSH免密登录
Jenkins执行脚本时使用的是自身运行用户(通常是jenkins用户)的权限,而非你本地用户。登录到Jenkins所在节点机器,切换到jenkins用户,手动执行ssh username@server_name,确认是否能免密登录:su - jenkins ssh username@server_name如果需要输入密码,说明未建立信任关系。此时需为
jenkins用户生成SSH密钥对,将公钥添加到目标服务器username用户的~/.ssh/authorized_keys文件中。添加SSH调试日志定位问题
修改Job.sh中的SSH命令,增加-v参数输出详细连接日志,通过Jenkins控制台日志查看具体报错:ssh -v -n username@server_name "mkdir -p ~/directory_name/folder_name/file_name"日志会显示连接过程中的每一步,比如主机密钥验证失败、密钥加载失败等问题。
确认目标服务器路径权限
手动登录目标服务器,使用username用户执行相同的mkdir命令,确认是否能成功创建目录:mkdir -p ~/directory_name/folder_name/file_name如果失败,检查父目录的读写权限,或者路径是否存在拼写错误。
避免Jenkins环境变量差异
Jenkins的执行环境可能与本地终端不同,可在Job.sh中添加环境变量输出,确认关键路径和变量:echo "当前用户:$(whoami)" echo "HOME路径:$HOME" echo "SSH路径:$(which ssh)"必要时使用SSH的绝对路径执行命令,比如
/usr/bin/ssh。检查Jenkins安全配置限制
确认Jenkins全局安全配置中是否限制了远程命令执行,或者节点的执行权限是否被约束。比如部分安全插件会拦截SSH类操作,可临时禁用插件测试,或调整节点的权限设置。
内容的提问来源于stack exchange,提问作者Aaron

