Jenkins通过sshpass执行scp时提示“文件或目录不存在”的问题排查
问题分析与解决
核心问题及修正点
- 参数拼接错误:
-p '$KEY'与-o之间没有空格,导致sshpass将'$KEY'-o整体识别为密码,无法正确定位后续的scp命令,这是触发"No such file or directory"报错的直接原因。 - 变量引用失效:用单引号包裹
$KEY会阻止Shell解析变量,$KEY不会被替换为实际密码值,导致sshpass使用错误的认证信息。 - 命令格式冗余:Jenkins Shell步骤中无需额外嵌套
sh """ ... """,这种写法会造成命令解析异常。
修正后的命令示例
sshpass -p "$KEY" -o StrictHostKeyChecking=no scp *.json $UNAME@$PROD_IP:/home/test
如果是在Jenkinsfile的script块中,正确写法如下:
script { sh ''' sshpass -p "$KEY" -o StrictHostKeyChecking=no scp *.json $UNAME@$PROD_IP:/home/test ''' }
额外注意事项
- 确认Jenkins运行节点已安装
sshpass工具,否则会提示找不到该命令。 - 若密码包含特殊字符,必须用双引号包裹
$KEY,避免Shell解析出错。 - 生产环境不建议使用明文密码传递,优先采用SSH密钥认证方式,安全性更高。
内容的提问来源于stack exchange,提问作者Temo Hatna
相关产品推荐
相关产品推荐

