将 ssh 密钥与作曲家一起用于私有 vcs

Har*_*oyd 6 php git bitbucket composer-php

我正在尝试将 Bitbucket 上托管的私有包拉入我的项目,但我似乎无法让 Composer 使用我的 SSH 密钥正常工作。

我目前正在尝试:

{
    "type": "composer",
    "url": "https://packagist.org"
},
{
    "type": "vcs",
    "url": "git@bitbucket.org:{projectName}/{repo}.git",
    "ssh2": {
        "username": "git",
        "privkey_file": "/home/vagrant/.ssh/bitbucket_id_rsa",
        "pubkey_file": "/home/vagrant/.ssh/bitbucket_id_rsa.pub"
    }
},
Run Code Online (Sandbox Code Playgroud)

当我尝试运行作曲家更新时,我得到了,Permission denied (publickey)但是当我运行时,ssh -T git@bitbucket.org -i /home/vagrant/.ssh/bitbucket_id_rsa我可以成功连接。

我不确定它是否甚至尝试使用指定的密钥,因为如果我在privpubkey 选项中键入随机字母,它仍然会以相同的方式失败,而不是抛出找不到文件。

希望这只是我犯的一个小配置错误,因为我不太确定它出了什么问题。

yiv*_*ivi 6

使用composer进行测试2.0.8,该ssh2选项仅支持"type": "composer"(尚未支持gitvcs类型)。

但即使对于"composer"类型,您也应该将ssh2选项写在它们所属的位置。这些属于options密钥的对象内部。例如:

{
  "repositories": [{
    "type": "composer",
    "url": "ssh2.sftp://example.org",
    "options": {
      "ssh2": {
        "username": "composer",
        "pubkey_file": "/home/composer/.ssh/id_rsa.pub",
        "privkey_file": "/home/composer/.ssh/id_rsa"
      }
    }
  }]
}
Run Code Online (Sandbox Code Playgroud)

位于它们所在的位置,作曲家简单地忽略这些设置并不奇怪。

其他替代方案

如果您有私有 bitbucket 存储库,您可能应该使用bitbucket 驱动程序

{
    "config": {
        "bitbucket-oauth": {
            "bitbucket.org": {
                "consumer-key": "myKey", 
                "consumer-secret": "mySecret"
            }
        }

    }
} 
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是,在bitbucket-pipelines.yml文件中我们可以代替所说的选项键:

git config --global core.sshCommand "ssh -p 22 -i '$(pwd)/my-ssh-key.txt' -o IdentitiesOnly=yes -F /dev/null"
Run Code Online (Sandbox Code Playgroud)

其中my-ssh-key.txt文件内容设置为用作 ssh 密钥。

只要上面运行在 Docker 镜像上,它就可以工作,但是对于所谓的“Runner”,我们需要撤消上面的操作,例如:

git config --global --unset core.sshCommand
Run Code Online (Sandbox Code Playgroud)