使用 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
其中<username>
和<password>
是Bitbucket 帐户名和密码,<repository>
是repo 名称,<branchname>
是分支。如果您希望下载特定的提交,请使用提交的 SHA-1 哈希代替 <branchname>.
--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 <username>:<password> https://bitbucket.org/<usename>/<project>/downloads/<filename> -o <filename>
从下载区下载,但是不行。知道为什么不?
@FaheemMitha,要从下载区下载,你需要添加-L
选项,像这样:curl -L --digest --user <username>:<password> https://bitbucket.org/<usename>/<project>/downloads/<filename> -o <filename>
是否需要--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=<password>
,以免我的密码可见和/或以纯文本形式存储在任何地方。【参考方案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 文件的主要内容,如果未能解决你的问题,请参考以下文章