使用 http 身份验证下载私有 BitBucket 存储库 zip 文件

Posted

技术标签:

【中文标题】使用 http 身份验证下载私有 BitBucket 存储库 zip 文件【英文标题】:Download private BitBucket repository zip file using http authentication 【发布时间】:2013-07-16 16:32:12 【问题描述】:

我正在编写一个脚本来轻松部署应用程序。应用程序的代码存储在私有 BitBucket 存储库中。

我希望能够下载提交的 zip 文件。我尝试使用以下代码进行身份验证:

https://user:pass@bitbucket.org/user/repo/get/commit.zip

但是,它不会完成任务,而是重定向到 BitBucket 上的登录页面。

【问题讨论】:

【参考方案1】:

就个人而言,我不想将密码放入我的脚本中来完成此操作。所以诀窍是在将您的公钥添加到您的 bitbucket 帐户后运行以下命令:

git archive --remote=ssh://git@bitbucket.org/your_bitbucket_username/your_repository.git --format=zip --output="name_of_your_desired_zip_file.zip" master

我的系统上有多个密钥,如果您也这样做,您需要在 ~/.ssh 目录中创建一个配置文件,指定使用特定密钥进行 bitbucket 连接。

~/.ssh/config

Host bitbucket.org
  StrictHostKeyChecking no
  IdentityFile /home/me/.ssh/my_private_key

【讨论】:

这只是方法,任何其他使用明文密码进行身份验证的方法都是错误的,除非您不关心安全性。【参考方案2】:

要从命令行下载 私有 Bitbucket 存储库的压缩副本,请使用以下命令:

curl --digest --user <username>:<password> https://bitbucket.org/<username>/<repository>/get/<branchname>.zip -o <branchname>.zip

其中&lt;username&gt;&lt;password&gt; 是Bitbucket 帐户名和密码,&lt;repository&gt; 是repo 名称,&lt;branchname&gt; 是分支。如果您希望下载特定的提交,请使用提交的 SHA-1 哈希代替 &lt;branchname&gt;.

--digest 标志是为了您的安全,并且是强烈推荐的。它完成了身份验证,因此您的用户名和密码不会明文发送。 -o 标志将 curl 命令的输出作为文件发送到磁盘,而不是通过终端屏幕流式传输。

注意: Bitbucket 的认证方案与wget. 不兼容,所以必须使用curl.

对于 public Bitbucket 存储库,命令是:

curl https://bitbucket.org/<username>/<repository>/get/<branchname>.zip -o <branchname>.zip

或者,您可以将wget 用于公共存储库,因为不需要身份验证:

wget https://bitbucket.org/<username>/<repository>/get/<branchname>.zip

除了.zip 格式,您还可以下载.gz.bz2 风格的存储库。只需将上面代码中的.zip 替换为.gz.bz2,即可以您选择的压缩格式下载存储库。

【讨论】:

我试过curl --digest --user &lt;username&gt;:&lt;password&gt; https://bitbucket.org/&lt;usename&gt;/&lt;project&gt;/downloads/&lt;filename&gt; -o &lt;filename&gt;从下载区下载,但是不行。知道为什么不? @FaheemMitha,要从下载区下载,你需要添加-L选项,像这样:curl -L --digest --user &lt;username&gt;:&lt;password&gt; https://bitbucket.org/&lt;usename&gt;/&lt;project&gt;/downloads/&lt;filename&gt; -o &lt;filename&gt; 是否需要--digest,因为它已经超过了https? BitBucket 已弃用,然后关闭了对摘要访问身份验证的支持。 More info. 请注意 wget 现在似乎可以与 Bitbucket 的身份验证方案一起使用。请参阅:laike9m's 和 mstra's 答案。【参考方案3】:

--digest 标志是为了您的安全,强烈推荐。它完成了身份验证,因此您的用户名和密码不会以明文形式发送。

这不是真的。

Bitbucket 专门使用 TLS,因此在任何时候都不会以明文形式通过网络传输任何内容。因此,Digest 与 Basic Auth 相比没有任何优势。事实上,考虑到 Digest 是服务器启动的,您需要额外的服务器往返请求服务器提供的 nonce。

自从几年前我们停止提供未加密的 HTTP 访问后,我们对 Digest 的使用就一直是多余的并且被弃用了,只是因为 @GrowlTiger 所建议的基于 curl 的脚本在执行 --digest

事实上,我们即将在 5 月 1 日完全关闭 Digest,之后curl --digest 将停止工作。

更多信息请见:https://blog.bitbucket.org/2015/04/03/fare-thee-well-digest-access-authentication/

【讨论】:

这不是对最初问题的回答,而是对另一个答案的评论。请重新发布作为对违规答案的评论(或附加到问题本身)。【参考方案4】:

对于那些想从 bitbucket 上的私人 repo 下载单个文件的人,我已经尝试了上述方法,但都没有奏效。最后我用下面的命令让它工作了:

wget --user=<user> --password=<password> https://bitbucket.org/<user>/<repo>/raw/master/<filename>

【讨论】:

这对我也有用,不过我更喜欢使用--ask-password 而不是--password=&lt;password&gt;,以免我的密码可见和/或以纯文本形式存储在任何地方。【参考方案5】:

GrowlTigers 的回答很棒,只是一个更新:使用 wget 它现在似乎也可以工作了:

wget --user=<username> --password='<password>' https://bitbucket.org/<user>/<repo>/get/<filename>.tar.gz

【讨论】:

【参考方案6】:

您使用的工具是否支持 URL 中的基本身份验证凭据? Curl request with digest auth in php for download Bitbucket private repository 强烈暗示:

curl --user user:pass https://bitbucket.org/user/repo/get/commit.zip >commit.zip

有效。

【讨论】:

【参考方案7】:

我发现这在较新版本的 Bitbucket 中有效

repository_list=" a b c"
for repository in $repository_list
do
    echo "Getting: $repository"
    curl --user userid:password \
         http://bitjira.xxx.com:7990/rest/api/latest/projects/WP/repos/$repository/archive?format=zip  \
         -o $repository.zip
done

【讨论】:

以上是关于使用 http 身份验证下载私有 BitBucket 存储库 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用私有路由和上下文响应身份验证

如何使用 OAuth2 身份验证保护私有数据?

Laravel echo - 无法通过私有频道进行身份验证

私有服务器的 Firebase 身份验证

下载 GitLab 私有存储库

发布到 Nexus 上的私有 NPM 存储库时的身份验证错误