使用Azure SSH任务解压远程Linux服务器文件时主机密钥验证失败
故障根因
你配置的SSH@0任务本身已经通过预先录入的sshEndpoint凭证完成了到目标CentOS服务器的连接,无需在inline脚本中二次调用ssh cbvr@172.22.159.132发起新的SSH请求。此次报错正是二次SSH请求触发的校验逻辑:服务器上的cbvr用户~/.ssh/known_hosts文件中没有存储172.22.159.132的主机密钥,因此抛出验证失败错误。
之前流水线能成功连接是因为旧任务没有嵌套多余的SSH命令,直接使用Azure DevOps侧sshEndpoint中预先存储的可信主机密钥完成校验,不受服务器本地known_hosts配置影响。
修复方案
- 优先删除inline脚本中冗余的二次SSH命令,直接执行解压操作即可,同时修正两处命令语法问题:
- 原路径
opt/cbvr/为相对路径,建议改为绝对路径/opt/cbvr/避免执行上下文异常 unzip的-d参数需要传入目标目录参数,如果需要解压到当前目录可直接省略-d,或在-d后追加.指定当前目录
修正后的任务配置如下:
- 原路径
- task: SSH@0 inputs: sshEndpoint: 'CentOS FTA VM APP1 CBVR' runOptions: 'inline' inline: | cd /opt/cbvr/ unzip -o EQ.MaxitCostBasis.Web.zip readyTimeout: '20000'
- 若确实存在特殊场景需要在inline脚本中执行跨主机SSH操作,可在SSH命令中添加参数临时跳过主机密钥校验,或提前将目标主机的密钥写入执行用户的
~/.ssh/known_hosts文件。跳过校验的命令示例如下:ssh -o StrictHostKeyChecking=no cbvr@172.22.159.132 '待执行的命令'
内容的提问来源于stack exchange,提问作者Rani
相关产品推荐
相关产品推荐

