【发布时间】:2013-07-16 16:32:12
【问题描述】:
我正在编写一个脚本来轻松部署应用程序。应用程序的代码存储在私有 BitBucket 存储库中。
我希望能够下载提交的 zip 文件。我尝试使用以下代码进行身份验证:
https://user:pass@bitbucket.org/user/repo/get/commit.zip
但是,它不会完成任务,而是重定向到 BitBucket 上的登录页面。
【问题讨论】:
我正在编写一个脚本来轻松部署应用程序。应用程序的代码存储在私有 BitBucket 存储库中。
我希望能够下载提交的 zip 文件。我尝试使用以下代码进行身份验证:
https://user:pass@bitbucket.org/user/repo/get/commit.zip
但是,它不会完成任务,而是重定向到 BitBucket 上的登录页面。
【问题讨论】:
就个人而言,我不想将密码放入我的脚本中来完成此操作。所以诀窍是在将您的公钥添加到您的 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
【讨论】:
要从命令行下载 私有 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>从下载区下载,但是不行。知道为什么不?
-L选项,像这样:curl -L --digest --user <username>:<password> https://bitbucket.org/<usename>/<project>/downloads/<filename> -o <filename>
--digest,因为它已经超过了https?
--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/
【讨论】:
对于那些想从 bitbucket 上的私人 repo 下载单个文件的人,我已经尝试了上述方法,但都没有奏效。最后我用下面的命令让它工作了:
wget --user=<user> --password=<password> https://bitbucket.org/<user>/<repo>/raw/master/<filename>
【讨论】:
--ask-password 而不是--password=<password>,以免我的密码可见和/或以纯文本形式存储在任何地方。
GrowlTigers 的回答很棒,只是一个更新:使用 wget 它现在似乎也可以工作了:
wget --user=<username> --password='<password>' https://bitbucket.org/<user>/<repo>/get/<filename>.tar.gz
【讨论】:
您使用的工具是否支持 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
有效。
【讨论】:
我发现这在较新版本的 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
【讨论】: