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)
您将无法像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`
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)
这比关闭严格的主机密钥检查安全得多。