ssh_askpass: exec(/usr/bin/ssh-askpass): 没有这样的文件或目录 权限被拒绝,请重试

ome*_*ero 7 git bitbucket autodeploy

我想在 Bitbucket 上运行 pipline。我进行了所有必要的设置。我安装了 ssh_askpass。我使用的是 Ubuntu 18。

但是,我收到以下错误。

ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
Permission denied, please try again.
Run Code Online (Sandbox Code Playgroud)

我的 bitbucket-pipelines.yml 文件:

pipelines:
  default:
    - step:
        deployment: staging
        caches:
          - composer
        script:
          - ssh -T root@142.93.143.146
          - eval `ssh-agent -s` && ssh-add ~/.ssh/id_rsa && ssh-add -l
          - cd /var/www/backoffice/
          - git checkout master 
          - git pull origin master 
          - sudo php artisan optimize 
          - sudo composer dump-autoload
          - echo 'Deploy finished....'
Run Code Online (Sandbox Code Playgroud)

bk2*_*204 3

您将无法像ssh-askpass在 CI 系统上那样使用任何类型的 GUI 程序,因为在 Linux CI 系统上没有可用的 GUI。

如果您想在 CI 系统中使用 SSH 密钥,您应该使用没有设置密码的密钥,并将其存储在 CI 系统的秘密存储中,然后将其复制到文件中并使用它。OpenSSH 故意不提供以编程方式读取密码的方法。

请注意,如果您只有一个没有密码的 SSH 密钥,则您不需要ssh-agentssh-add根本不需要。假设你的私钥的内容在变量中SSH_KEY(例如,由于你的 CI 系统的秘密存储),你可以简单地执行以下操作:

echo "$SSH_KEY" > ~/.ssh/id_rsa
ssh root@142.93.143.146 'echo hello from the remote machine`
Run Code Online (Sandbox Code Playgroud)

您不会想ssh在没有命令的情况下运行,因为它将尝试启动交互式会话,这对您没有用处。如果您的目标是使用 Git 推送和拉取 SSH 连接,那么您ssh根本不需要运行。

最后,请注意,您可能希望将远程系统的主机密钥信息写入文件中,作为管道的一部分,无论是来自管道还是秘密,因为如果主机密钥不受信任,SSH 将无法连接。您可以通过运行如下命令来获取此信息:ssh-keyscan github.com 2>/dev/null。然后,您可以获取该输出并将其插入到您的known_hosts文件中,如下所示:

echo "github.com ssh-rsa AAAA...truncated" > ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

这比关闭严格的主机密钥检查安全得多。