Làm cách nào để lưu tên người dùng và mật khẩu với Mercurial?


269

Tôi đã sử dụng Mercurial trong một dự án cá nhân và tôi đã gõ tên người dùng và mật khẩu của mình mỗi lần tôi muốn đẩy thứ gì đó lên máy chủ.

Tôi đã thử thêm các mục sau vào .hgrctập tin trong thư mục nhà của tôi, nhưng dường như nó hoàn toàn bị bỏ qua.

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

Làm thế nào để làm điều này đúng cách?

Câu trả lời:


328

Bạn có thể tạo một phần xác thực trong tệp .hgrchoặc Mercurial.initệp của mình, như vậy:

[auth]
bb.prefix = https://bitbucket.org/repo/path
bb.username = foo
bb.password = foo_passwd

Phần 'bb' là một mã định danh tùy ý và được sử dụng để khớp tiền tố với tên người dùng và mật khẩu - tiện dụng để quản lý các kết hợp tên người dùng / mật khẩu khác nhau với các trang web khác nhau (tiền tố)

Bạn cũng chỉ có thể chỉ định tên người dùng, sau đó bạn sẽ chỉ phải nhập mật khẩu của mình khi bạn đẩy.

Tôi cũng khuyên bạn nên xem phần mở rộng keyring . Vì nó lưu mật khẩu trong vòng khóa của hệ thống của bạn thay vì tệp văn bản thuần túy, nên nó an toàn hơn. Nó được đóng gói với TortoiseHg trên Windows và hiện đang có một cuộc thảo luận về việc phân phối nó dưới dạng một tiện ích mở rộng kèm theo trên tất cả các nền tảng.


3
Tại sao điều này không hoạt động khi máy chủ là: ssh: // HGSERVER? định dạng "ssh: // tên người dùng: password @ HGSERVER" cũng không hoạt động ..
Oren

1
@Oren - xem bình luận bên dưới - nếu bạn đang sử dụng SSH, tại sao không sử dụng đăng nhập dựa trên khóa?
David Eads

@santafebound Như văn bản nói, "tùy ý" của nó và chỉ được sử dụng để liên kết tên người dùng và mật khẩu với tiền tố để cung cấp bất kỳ thẻ nào có ý nghĩa với bạn.
Chris McCauley

Tôi thực sự không khuyên bạn nên lưu trữ mật khẩu trong văn bản đơn giản (đó là những gì câu trả lời này làm, ngay cả khi nó cũng đề cập ngắn gọn một cách thay thế tốt hơn).
Jasper

170

Có ba cách để làm điều này: sử dụng tệp .hgrc, sử dụng ssh hoặc sử dụng phần mở rộng khóa


1. Cách không an toàn - cập nhật tệp ~ / .hgrc của bạn

Định dạng phù hợp với tôi (trong tệp ~ / .hgrc của tôi) là định dạng này

[ui]
username=Chris McCauley <chris.mccauley@mydomain.com>

[auth]
repo.prefix = https://server/repo_path
repo.username = username
repo.password = password


Bạn có thể định cấu hình nhiều repos như bạn muốn bằng cách thêm nhiều bộ ba tiền tố, tên người dùng, mật khẩu bằng cách thêm một thẻ duy nhất.

Điều này chỉ hoạt động trong Mercurial 1.3 và rõ ràng tên người dùng và mật khẩu của bạn ở dạng văn bản thuần túy - không tốt.


2. Cách an toàn - Sử dụng SSH để AVOID bằng mật khẩu

Mercurial hỗ trợ đầy đủ SSH để chúng tôi có thể tận dụng khả năng của SSH để đăng nhập vào máy chủ mà không cần mật khẩu - bạn thực hiện cấu hình một lần để cung cấp chứng chỉ tự tạo. Đây là cách an toàn nhất để làm những gì bạn muốn.


Bạn có thể tìm thêm thông tin về cấu hình đăng nhập mật khẩu tại đây


3. Phần mở rộng khóa

Nếu bạn muốn một tùy chọn an toàn, nhưng không quen thuộc với SSH, tại sao không thử điều này?

Từ các tài liệu ...

Tiện ích mở rộng nhắc nhập mật khẩu HTTP trong lần kéo / đẩy đến / từ kho lưu trữ từ xa đầu tiên (giống như được thực hiện theo mặc định), nhưng lưu mật khẩu (được khóa bởi sự kết hợp của tên người dùng và url kho lưu trữ từ xa) trong cơ sở dữ liệu mật khẩu. Trong lần chạy tiếp theo, nó sẽ kiểm tra tên người dùng trong .hg / hgrc, sau đó tìm mật khẩu phù hợp trong cơ sở dữ liệu mật khẩu và sử dụng các thông tin đăng nhập đó nếu tìm thấy.

Có nhiều thông tin chi tiết hơn ở đây


3
Satoru, Chris không nói về đồng bóng, nhưng về ssh: ssh có thể được thiết lập để bạn không phải xác định chính mình bằng mật khẩu (như được mô tả ở đây: debian-ad dùng.org / articles / 152 ).
Tomislav Nakic-Alfirevic

4
Phương pháp 2 thực sự là cách duy nhất để xử lý mọi thứ một cách an toàn và duy trì các quyền cấp người dùng trên hệ thống từ xa.
Peter Rowell

2
Câu trả lời của user570626 về việc sử dụng tích hợp khóa tốt hơn nhiều so với một trong hai. @Peter Rowell: thiết lập ssh là một nỗi đau thực sự nếu bạn có một vài người dùng và kho lưu trữ; bạn cần người dùng unix cục bộ và phải khắc phục bằng cách hạn chế các lệnh có thể chạy với .ssh / ủy quyền và trình bao bọc. Không chính xác là một giải pháp sạch.
Draemon

5
@Peter Rowell: 1. điều đó tạo ra sự khác biệt gì? Tôi nói giải pháp của anh ấy tốt hơn không sớm hơn. 2. Nó không liên quan gì đến môi trường lưu trữ, đó hoàn toàn là phía máy khách (không giống như giải pháp SSH của bạn yêu cầu thay đổi ở phía máy chủ để hỗ trợ nó). 3. Bóng bẩy trên trolling và khoe khoang, tôi vẫn nói rằng đó không phải là một giải pháp sạch. Bạn cần một người dùng cục bộ và bạn phải cấp cho họ quyền truy cập shell sau đó hạn chế điều đó. Truy cập Shell không phải lúc nào cũng là một lựa chọn hợp lý. Tôi ngạc nhiên khi ai đó về trải nghiệm của bạn đã không bắt gặp một sysadmin, người không muốn cấp quyền truy cập shell dịch vụ của bạn.
Draemon

2
@Draemon: Tôi đoán chúng ta có những trải nghiệm khác nhau. Cá nhân, tôi sẽ không làm việc trên một hệ thống mà tôi không có dấu nhắc shell. Nó khiến tôi hoàn toàn phụ thuộc vào hệ thống khác để cài đặt những gì tôi cần. Kinh nghiệm chung của tôi là nếu tôi không thể nhận được lời nhắc, tôi gần như chắc chắn không thể nhận được các dịch vụ khác mà tôi cho là cơ bản cho quy trình làm việc của mình. Khác nhau (chính) đột quỵ cho những người khác nhau.
Peter Rowell

65

Không ai đề cập đến phần mở rộng keyring. Nó sẽ lưu tên người dùng và mật khẩu vào khóa hệ thống, an toàn hơn nhiều so với việc lưu mật khẩu của bạn trong một tệp tĩnh như đã đề cập ở trên. Thực hiện các bước dưới đây và bạn sẽ tốt để đi. Tôi đã có nó và chạy trên Ubuntu trong khoảng 2 phút.

>> sudo apt-get install python-pip
>> sudo pip install keyring
>> sudo pip install mercurial_keyring

**Edit your .hgrc file to include the extension**
[extensions]
mercurial_keyring = 

https://www.mercurial-scm.org/wiki/KeyringExtension


1
Đây là giải pháp yêu thích của tôi. ... và chỉ để nói thứ hai những gì @hadrien đã nói, sau ba hành động được mô tả, nó hoạt động như một cơ duyên trên Mac OS X.
ngeek

Tôi cũng thứ hai @ngeek vì đã biệt phái tôi!
Hadrien

Trên Windows ít nhất TortoiseHg hỗ trợ tiện ích mở rộng khóa: Cài đặt toàn cầu -> Tiện ích mở rộng -> mercurial_keyring
user272735

Thật không may, hiện tại phần mở rộng khóa có một lỗi trên Windows, nơi nó chỉ có thể lưu một mật khẩu tại một thời điểm. Xem câu hỏi này .
Laurens Holst

Đây có vẻ là giải pháp tốt nhất, nhưng khi tôi cố gắng sử dụng nó trên OSX, python segfaults khi cố gắng lấy mật khẩu từ móc khóa.
Isaac

30

Cách hack đơn giản là thêm tên người dùng và mật khẩu vào url đẩy trong .hg/hgrctệp dự án của bạn :

[paths]
default = http://username:password@mydomain.com/myproject

(Lưu ý rằng theo cách này, bạn lưu trữ mật khẩu bằng văn bản thuần túy)

Nếu bạn đang làm việc trên một số dự án trong cùng một tên miền, bạn có thể muốn thêm quy tắc viết lại trong ~/.hgrctệp của mình , để tránh lặp lại điều này cho tất cả các dự án:

[rewrite]
http.//mydomain.com = http://username:password@mydomain.com

Một lần nữa, vì mật khẩu được lưu trữ trong văn bản thuần túy, tôi thường chỉ lưu tên người dùng của mình.

Nếu bạn đang làm việc theo Gnome, tôi sẽ giải thích cách tích hợp Mercurial và Gnome Keyring tại đây:

http://aloiroberto.wordpress.com/2009/09/16/mercurial-gnome-keyring-integration/


Tôi đã tải phần mở rộng, tuy nhiên, khi tôi đã cố gắng để thực hiện một push mật khẩu nhanh chóng từ chối cho tôi vượt qua :( Có thể tôi đã thực hiện nó một cách sai lầm Tôi chưa bao giờ sử dụng Gnome Keyring trước Cảm ơn tất cả các bạn như vậy...
satoru

Bạn có thể muốn sử dụng các tùy chọn --debug và --verbose cho hg đẩy để xem điều gì đang xảy ra ...
Roberto Aloi

hoàn hảo cho trường hợp trong tay ... nếu bạn đang sử dụng ssh, bạn không cần nhập mật khẩu ... đó là những gì các phím dành cho
beauXjames

Tất nhiên, giả sử bạn có sự sang trọng của một thiết bị mà bạn có thể lấy khóa công khai.
David đưa ra

23

NOBODY ở trên đã giải thích / làm rõ các điều khoản cho người dùng mới làm quen. Họ bị lẫn lộn bởi các điều khoản

.hg / hgrc - tệp này được sử dụng cho Kho lưu trữ, tại vị trí cục bộ / không gian làm việc / trong thư mục .hg của kho lưu trữ thực tế.

~ / .hgrc - tệp này khác với tệp dưới đây. tập tin này nằm ở ~ hoặc thư mục nhà.

myremote.xxxx = ..... bb.xxxx = ......

Đây là một trong những dòng trong phần [auth] phần / chỉ thị, trong khi sử dụng phần mở rộng khóa phím. Đảm bảo tên máy chủ bạn đặt ở đó, khớp với tên bạn sử dụng trong khi thực hiện "hg clone" nếu không khóa sẽ nói, người dùng không tìm thấy. bb hoặc myremote trong dòng bên dưới, là "tên bí danh" mà bạn PHẢI đưa ra khi thực hiện "hg clone http: /.../../ repo1 bb hoặc myremote" nếu không, nó sẽ không hoạt động hoặc bạn phải đảm bảo địa phương của mình Tệp .hg / hgrc của kho chứa cùng một bí danh, nghĩa là (những gì bạn đã cho trong khi thực hiện hg clone .. như tham số cuối cùng).

PS các liên kết sau đây để biết chi tiết rõ ràng, xin lỗi vì ngữ pháp được viết nhanh chóng.

ví dụ: Nếu bên trong ~ / .hgrc (thư mục chính của người dùng trong Linux / Unix) hoặc mercurial.ini trong Windows tại thư mục chính của người dùng, có chứa, dòng sau và nếu bạn làm

`"hg clone http://.../.../reponame myremote"`

, sau đó bạn sẽ không bao giờ được nhắc về thông tin đăng nhập của người dùng nhiều hơn một lần cho mỗi liên kết repo http. Trong ~ / .hgrc trong [phần mở rộng] một dòng cho "mercurial_keyring =" hoặc "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" .. một trong những dòng này sẽ có ở đó.

[auth]
myremote.schemes = http https
myremote.prefix = thsusncdnvm99/hg
myremote.username = c123456

Tôi đang cố gắng tìm hiểu cách đặt thuộc tính PREFIX để người dùng có thể sao chép hoặc thực hiện bất kỳ thao tác Hg nào mà không cần nhắc tên người dùng / mật khẩu và không phải lo lắng về những gì anh ta đã đề cập trong http: // .... / ... cho tên máy chủ trong khi sử dụng liên kết repo Hg. Nó có thể là IP, tên máy chủ hoặc FQDN của máy chủ


4

Cài đặt mercurial_keyring trên Mac OSX bằng MacPorts:

sudo port install py-keyring
sudo port install py-mercurial_keyring

Thêm dòng sau vào ~ / .hgrc:

# Add your username if you haven't already done so.
[ui]
username = email@address.com

[extensions]
mercurial_keyring =

Tôi nhận được "không có mô-đun có tên mercurial_keyring" trong TortoiseHg sau khi chạy các lệnh này và cập nhật tệp .hgrc của tôi.
Dunc

Hãy chắc chắn rằng bạn có phiên bản Python phù hợp, như được mô tả ở đây: stackoverflow.com/questions/5173197/iêu
phm

2

Nếu bạn đang sử dụng TortoiseHg, bạn phải thực hiện ba bước được hiển thị trong ảnh chụp màn hình đính kèm, điều này sẽ thêm thông tin đăng nhập của bạn cho kho lưu trữ cụ thể mà bạn đang làm việc.

nhập mô tả hình ảnh ở đây

Để thêm cài đặt chung, bạn có thể truy cập tệp C: \ users \ user.name \ mercurial.ini và thêm phần

[auth]
bb.prefix=https://bitbucket.org/zambezia/packagemanager
bb.username = $username
bb.password = $password

Hi vọng điêu nay co ich.


0

Mặc dù nó có thể hoặc không hoạt động trong tình huống của bạn, tôi đã thấy hữu ích khi tạo khóa công khai / riêng tư bằng cách sử dụng Cuộc thi của Putty.

Nếu bạn cũng đang làm việc với bitbucket (.org), nó sẽ cung cấp cho bạn khả năng cung cấp khóa chung cho tài khoản người dùng của bạn và sau đó các lệnh tiếp cận với kho lưu trữ sẽ được bảo mật tự động.

Nếu Pagete không khởi động cho bạn khi khởi động lại, bạn có thể thêm lối tắt vào Pageant vào "Menu bắt đầu" của Windows và phím tắt có thể cần phải có 'thuộc tính' được điền với vị trí của tệp riêng tư (.ppk) của bạn .

Với điều này, Mercurial và các kho lưu trữ cục bộ của bạn sẽ cần được thiết lập để đẩy / kéo bằng định dạng SSH.

Dưới đây là một số hướng dẫn chi tiết về Atlassian trang web của cho Windows HOẶC Mac / Linux.

Bạn không cần phải tin lời tôi và không còn cách nào khác để làm điều đó. Có lẽ các bước được mô tả ở đây là nhiều hơn cho bạn:

  1. Bắt đầu PuttyGen từ Bắt đầu -> PuTTY-> PuttyGen
  2. Tạo khóa mới và lưu nó dưới dạng tệp .ppk mà không cần cụm mật khẩu
  3. Sử dụng Putty để đăng nhập vào máy chủ mà bạn muốn kết nối
  4. Nối văn bản Khóa công khai từ PuttyGen vào văn bản của ~ / .ssh / ủy quyền
  5. Tạo lối tắt đến tệp .ppk của bạn từ Bắt đầu -> Putty để Bắt đầu -> Khởi động
  6. Chọn phím tắt .ppk từ menu Khởi động (điều này sẽ tự động xảy ra ở mỗi lần khởi động)
  7. Xem biểu tượng Cuộc thi trong khay hệ thống? Nhấp chuột phải vào nó và chọn phiên bản mới
  8. Nhập tên người dùng @ tên máy chủ trong trường Tên máy chủ lưu trữ
  9. Bây giờ bạn sẽ đăng nhập tự động.

0

Sử dụng phần mở rộng keyring. Thêm mục dưới đây vào tập tin mercurial.ini.

[phần mở rộng] mercurial_keyring =

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.