1

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

但是,我收到以下错误。

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

我的 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....'
4

1 回答 1

2

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

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

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

echo "$SSH_KEY" > ~/.ssh/id_rsa
ssh root@142.93.143.146 'echo hello from the remote machine`

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

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

echo "github.com ssh-rsa AAAA...truncated" > ~/.ssh/known_hosts

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

于 2020-08-25T00:47:28.607 回答