2013-07-16 69 views
25

Tôi đang viết một tập lệnh để dễ dàng triển khai một ứng dụng. Mã cho ứng dụng được lưu trữ trong kho lưu trữ BitBucket riêng.Tải xuống tệp nén kho lưu trữ BitBucket riêng tư bằng cách sử dụng xác thực http

Tôi muốn có thể tải xuống tệp zip của cam kết. Tôi đã cố gắng chứng thực với đoạn mã sau:

https://user:[email protected]/user/repo/get/commit.zip

Tuy nhiên, thay vì hoàn thành nhiệm vụ nó chuyển hướng đến trang đăng nhập vào BitBucket.

Trả lời

28

Để tải về một bản sao nén của một kho lưu trữ tin Bitbucket từ dòng lệnh, sử dụng như sau:

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

nơi <username><password> là tên tài khoản Bitbucket và mật khẩu, <repository> là repo và <branchname> là chi nhánh. Nếu bạn muốn tải xuống một cam kết cụ thể, hãy sử dụng hàm băm SHA-1 của cam kết thay cho <branchname>.

Cờ --digest là để bảo mật cho bạn và được khuyến nghị là . Nó hoàn thành xác thực sao cho tên người dùng và mật khẩu của bạn là không phải là được gửi rõ ràng. Cờ -o gửi đầu ra của lệnh curl tới đĩa dưới dạng tệp, thay vì phát trực tuyến trên màn hình thiết bị đầu cuối của bạn.

Lưu ý: cơ chế thẩm Bitbucket là không tương thích với wget. Đó là lý do tại sao bạn phải sử dụng curl.

Đối công Bitbucket kho lệnh là:

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

Hoặc xen kẽ, bạn có thể sử dụng wget cho các kho lưu trữ công khai vì không yêu cầu xác thực:

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

Ngoài định dạng .zip, bạn có thể tải xuống các vị trí lưu trữ ở .gz.bz2 hương vị. Chỉ cần thay thế .zip trong mã ở trên bằng cách .gz hoặc .bz2 để tải xuống kho lưu trữ ở định dạng nén mà bạn chọn.

+4

tôi đã cố gắng 'curl --digest --user : https://bitbucket.org/ //downloads/ -o 'để tải về từ Tải xuống khu vực nhưng không hoạt động. Bất kỳ ý tưởng tại sao không? –

+0

Làm việc như một sự quyến rũ đối với tôi. Cảm ơn! Bây giờ tôi đã tạo tập lệnh tự động cập nhật cho trang web của mình! – alexander7567

+1

@FaheemMitha, để tải xuống từ khu vực Tải xuống, bạn cần thêm tùy chọn '-L', như sau:' curl -L --digest --user : https://bitbucket.org/ //tải xuống/ -o ' – user1027169

29

Cá nhân, tôi không muốn đặt mật khẩu của mình vào tập lệnh để thực hiện việc này. Vì vậy, các trick là để chạy lệnh sau, sau khi thêm khóa công khai của bạn vào tài khoản bitbucket của bạn:

git archive --remote=ssh://[email protected]/your_bitbucket_username/your_repository.git --format=zip --output="name_of_your_desired_zip_file.zip" master 

Tôi có nhiều phím trên hệ thống của tôi, nếu bạn làm quá, bạn sẽ muốn tạo một tập tin cấu hình bên trong của bạn ~/.ssh thư mục chỉ định sử dụng một khóa cụ thể cho các kết nối bitbucket.

~/.ssh/config

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

Đây chỉ là cách để thực hiện, bất kỳ cách nào khác để xác thực bằng mật khẩu văn bản rõ ràng là sai, trừ khi bạn không quan tâm đến bảo mật. – thomas

2

GrowlTigers trả lời là rất tốt, chỉ cần một bản cập nhật: với wget có vẻ như để làm việc bây giờ, quá:

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

Đối với những người muốn tải về tập tin duy nhất từ ​​repo tư nhân trên bitbucket, tôi đã thử ở trên nhưng không ai làm việc. Cuối cùng tôi đã nhận nó làm việc với các lệnh dưới đây:

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

Điều này cũng làm việc cho tôi, mặc dù tôi thích sử dụng '--ask-password' hơn là' --password = 'để không hiển thị mật khẩu của tôi và/hoặc được lưu trữ ở bất kỳ đâu dưới dạng văn bản thuần túy. – Jonny

9

Cờ --digest là dành cho bảo mật của bạn, và là rất khuyến khích. Nó hoàn thành xác thực để tên người dùng và mật khẩu của bạn không được gửi đi rõ ràng.

Điều này không đúng.

Bitbucket độc quyền sử dụng TLS và do đó, tại thời điểm không có bất cứ điều gì đi qua dây trong văn bản rõ ràng. Kết quả là, Digest không cung cấp lợi ích nào so với Xác thực cơ bản. Trong thực tế, xem xét rằng Digest là máy chủ bắt đầu, bạn phải chịu thêm một máy chủ vòng chuyến đi yêu cầu máy chủ cung cấp nonce.

Việc sử dụng Thông báo của chúng tôi đã bị thừa và không được dùng kể từ khi chúng tôi ngừng cung cấp quyền truy cập HTTP không được mã hóa cách đây vài năm và được lưu giữ chỉ vì có các tập lệnh dựa trên curl làm --digest theo đề xuất của @GrowlTiger.

Thực tế, chúng tôi sắp tắt hoàn toàn thông báo vào ngày 1 tháng 5, sau đó curl --digest sẽ ngừng hoạt động.

Thông tin thêm có thể được tìm thấy: https://blog.bitbucket.org/2015/04/03/fare-thee-well-digest-access-authentication/

+0

Đây không phải là câu trả lời cho câu hỏi ban đầu, mà là một bình luận cho câu trả lời khác.Vui lòng đăng lại dưới dạng nhận xét cho câu trả lời vi phạm (hoặc được đính kèm với chính câu hỏi đó). –