Bitbucket Pipeline连接EC2服务器报错:ssh_askpass及主机密钥验证失败
错误含义解析
ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory:Bitbucket Pipeline运行在非交互式环境中,当SSH需要确认新主机的密钥时,无法弹出交互确认窗口,会尝试调用ssh-askpass工具,但该工具未在Pipeline环境中安装,因此抛出此错误。Host key verification failed:这是连接失败的核心原因。新创建的EC2服务器的主机密钥未被Bitbucket Pipeline环境信任,默认情况下SSH会验证陌生主机的密钥,非交互式环境中无法手动确认,导致连接失败。旧服务器的密钥已存在于Pipeline的~/.ssh/known_hosts文件中,所以能正常连接。
解决方法
方法1:提前添加新EC2的主机密钥到信任列表(推荐)
在本地终端执行以下命令,获取新EC2的主机密钥:
ssh-keyscan -H <EC2公网IP或域名>输出的内容类似:
|<EC2公网IP>| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBB...配置Bitbucket Pipeline:
- 方式一:在
bitbucket-pipelines.yml中添加步骤写入密钥:pipelines: default: - step: script: - mkdir -p ~/.ssh - echo "获取到的主机密钥行" >> ~/.ssh/known_hosts - chmod 600 ~/.ssh/known_hosts - ssh ec2-user@<EC2公网IP> "你的业务命令" - 方式二:在Bitbucket仓库的设置 > SSH密钥页面,将获取到的主机密钥粘贴到
Known hosts字段中,Pipeline运行时会自动加载该配置。
- 方式一:在
方法2:临时禁用主机密钥验证(仅测试场景)
在SSH命令中添加参数跳过密钥验证,注意此方式存在安全风险,生产环境禁止使用:
ssh -o StrictHostKeyChecking=no ec2-user@<EC2公网IP> "你的业务命令"
方法3:确认基础配置无误
- 检查Bitbucket仓库的SSH密钥列表,确保用于连接EC2的私钥已正确配置。
- 确认新EC2服务器的
~/.ssh/authorized_keys文件中已添加对应公钥。 - 检查EC2安全组规则,允许Bitbucket Pipeline的IP段访问22端口。
内容的提问来源于stack exchange,提问作者Thilina Ashen Gamage
相关产品推荐
相关产品推荐

