Jak zapisać nazwę użytkownika i hasło w Mercurial?

269

Użyłem Mercurial w osobistym projekcie i za każdym razem, gdy chcę przekazać coś na serwer, wpisuję nazwę użytkownika i hasło.

Próbowałem dodać następujący .hgrcplik do mojego katalogu domowego, ale wydaje się, że jest całkowicie ignorowany.

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

Jak to zrobić we właściwy sposób?

satoru
źródło

Odpowiedzi:

328

Możesz utworzyć sekcję uwierzytelniania w swoim pliku .hgrclub Mercurial.inipliku, na przykład:

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

Część „bb” jest dowolnym identyfikatorem i służy do dopasowania prefiksu z nazwą użytkownika i hasłem - przydatna do zarządzania różnymi kombinacjami nazwy użytkownika / hasła w różnych witrynach (prefiks)

Możesz także podać tylko nazwę użytkownika, a następnie będziesz musiał wpisać hasło po naciśnięciu.

Poleciłbym również rzucić okiem na rozszerzenie kluczy . Ponieważ przechowuje hasło w breloku systemowym zamiast w zwykłym pliku tekstowym, jest bardziej bezpieczne. Jest on zawarty w pakiecie z TortoiseHg w systemie Windows, a obecnie dyskutuje się na temat rozpowszechniania go jako pakietu na wszystkich platformach.

Laurens Holst
źródło
3
Dlaczego to nie działa, gdy serwer to: ssh: // HGSERVER? format „ssh: // nazwa użytkownika: hasło @ HGSERVER” również nie działa ..
Oren
1
@Oren - spójrz na poniższy komentarz - jeśli używasz SSH, dlaczego nie skorzystać z logowania na podstawie klucza?
David Eads,
@ santafebound Jak mówi tekst, jest on „arbitralny” i służy jedynie do powiązania nazwy użytkownika i hasła z prefiksem, więc podaj dowolny znacznik, który ma dla ciebie sens.
Chris McCauley,
Naprawdę nie polecałbym przechowywania haseł w postaci zwykłego tekstu (co robi ta odpowiedź, nawet jeśli krótko wspomina o lepszej alternatywie).
Jasper
170

Można to zrobić na trzy sposoby: użyj pliku .hgrc, użyj ssh lub użyj rozszerzenia kluczy


1. Sposób BEZPIECZEŃSTWA - zaktualizuj plik ~ / .hgrc

Format, który działa dla mnie (w moim pliku ~ / .hgrc) jest następujący

[ui]
username=Chris McCauley <[email protected]>

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


Możesz skonfigurować dowolną liczbę repozytoriów, dodając więcej trojaczków prefiksu, nazwy użytkownika i hasła, przygotowując unikalny tag.

Działa to tylko w Mercurial 1.3 i oczywiście twoja nazwa użytkownika i hasło są w postaci zwykłego tekstu - niezbyt dobrze.


2. Bezpieczny sposób - użyj SSH, aby UNIKAĆ za pomocą haseł

Mercurial w pełni obsługuje SSH, dzięki czemu możemy skorzystać ze zdolności SSH do zalogowania się na serwerze bez hasła - wykonujesz jednorazową konfigurację, aby zapewnić certyfikat wygenerowany przez siebie. Jest to zdecydowanie najbezpieczniejszy sposób na robienie tego, co chcesz.


Więcej informacji na temat konfigurowania logowania bez hasła można znaleźć tutaj


3. Rozszerzenie breloka

Jeśli chcesz bezpieczną opcję, ale nie znasz SSH, dlaczego nie spróbować?

Z dokumentów ...

Rozszerzenie pyta o hasło HTTP przy pierwszym ściągnięciu / wypchnięciu do / z danego zdalnego repozytorium (tak jak dzieje się to domyślnie), ale zapisuje hasło (wpisane przez kombinację nazwy użytkownika i adresu URL zdalnego repozytorium) w bazie danych haseł. Przy następnym uruchomieniu sprawdza nazwę użytkownika w .hg / hgrc, a następnie odpowiednie hasło w bazie danych haseł i używa tych poświadczeń, jeśli zostały znalezione.

Bardziej szczegółowe informacje tutaj

Chris McCauley
źródło
3
Satoru, Chris nie mówi o mercurial, ale o ssh: ssh można skonfigurować tak, abyś nie musiał się identyfikować za pomocą hasła (jak opisano np. Tutaj: debian-administration.org/articles/152 ).
Tomislav Nakic-Alfirevic
4
Metoda 2 jest tak naprawdę jedynym sposobem bezpiecznego zarządzania rzeczami i utrzymania uprawnień na poziomie użytkownika w systemie zdalnym.
Peter Rowell
2
Odpowiedź użytkownika 570626 na użycie integracji kluczy jest znacznie lepsza niż którykolwiek z nich. @Peter Rowell: konfiguracja ssh to prawdziwy ból, jeśli masz kilku użytkowników i repozytoria; potrzebujesz lokalnych użytkowników unixa i musisz się skupić na ograniczeniu poleceń, które można uruchamiać za pomocą .ssh / uprawnionych_kluczy i opakowania powłoki. Niezupełnie czyste rozwiązanie.
Draemon
5
@Peter Rowell: 1. Jaka to różnica? Powiedziałem, że jego rozwiązanie jest lepsze nie wcześniej. 2. Nie ma to nic wspólnego ze środowiskiem hostingowym, jest wyłącznie po stronie klienta (w przeciwieństwie do rozwiązania SSH, które wymaga zmian po stronie serwera, aby go obsługiwać). 3. Przeglądając trollowanie i chwalenie się, wciąż mówię, że nie jest to czyste rozwiązanie. Potrzebujesz lokalnego użytkownika i musisz dać mu dostęp do powłoki, a następnie go ograniczyć. Dostęp do powłoki nie zawsze jest rozsądną opcją. Dziwi mnie, że ktoś z twojego doświadczenia nie spotkał administratora systemu, który nie chciałby dać dostępu do powłoki usługi.
Draemon
2
@Draemon: Chyba mamy różne doświadczenia. Osobiście nie będę pracował w systemie, w którym nie mam monitu powłoki. To sprawia, że ​​jestem całkowicie zależny od drugiego systemu, który już zainstalował to, czego potrzebuję. Moje ogólne doświadczenie jest takie, że jeśli nie mogę uzyskać monitu, prawie na pewno nie mogę uzyskać innych usług, które uważam za podstawowe dla mojego przepływu pracy. Różne (kluczowe) pociągnięcia dla różnych ludzi.
Peter Rowell,
65

Nikt nie wspomniał o przedłużeniu kluczy. Zapisze nazwę użytkownika i hasło w systemowym kluczyku, co jest znacznie bezpieczniejsze niż przechowywanie haseł w pliku statycznym, jak wspomniano powyżej. Wykonaj poniższe czynności i powinieneś być gotowy. Uruchomiłem to na Ubuntu w około 2 minuty.

>> 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

użytkownik570626
źródło
1
To jest moje ulubione rozwiązanie. ... i po drugie, co powiedział @hadrien, po opisanych trzech akcjach działa jak urok w Mac OS X.
ngeek
Popieram też @ngeek za oddelegowanie mnie!
Hadrien
W systemie Windows co najmniej TortoiseHg obsługuje rozszerzenie kluczy: Ustawienia globalne -> Rozszerzenia -> mercurial_keyring
user272735
Niestety obecnie rozszerzenie kluczy ma błąd w systemie Windows, w którym można zapisać tylko jedno hasło na raz. Zobacz to pytanie .
Laurens Holst
Wydaje się, że to najlepsze rozwiązanie, ale kiedy próbuję użyć go w OSX, python segfaultuje się przy próbie uzyskania hasła z pęku kluczy.
Izaak,
30

Prostym włamaniem jest dodanie nazwy użytkownika i hasła do adresu URL wypychania w .hg/hgrcpliku projektu :

[paths]
default = http://username:[email protected]/myproject

(Pamiętaj, że w ten sposób przechowujesz hasło w postaci zwykłego tekstu)

Jeśli pracujesz nad kilkoma projektami w tej samej domenie, możesz dodać regułę przepisywania w swoim ~/.hgrcpliku, aby uniknąć powtarzania tego dla wszystkich projektów:

[rewrite]
http.//mydomain.com = http://username:[email protected]

Ponownie, ponieważ hasło jest przechowywane jako zwykły tekst, zwykle przechowuję tylko moją nazwę użytkownika.

Jeśli pracujesz pod Gnome, wyjaśniam tutaj, jak zintegrować Mercurial i Gnome Keyring:

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

Roberto Aloi
źródło
Jednak ściągnąłem rozszerzenie, kiedy próbowałem wykonać push, hasło nie pozwala mi przejść :( Być może zrobiłem to w niewłaściwy sposób. Nigdy wcześniej nie korzystałem z Gnome Keyring. Dziękuję ci tak samo.
satoru
Może chcesz użyć --debug oraz --verbose dla hg naciśnięciem, aby zobaczyć, co się dzieje źle ...
Roberto aloi
idealny do rozpatrywanej sprawy ... jeśli używasz ssh, nie musisz podawać hasła ... do tego właśnie
służą
Zakładając, że masz luksus urządzenia, z którego możesz oczywiście usunąć klucz publiczny.
David Biorąc pod uwagę
23

Nikt powyżej wyjaśnił / wyjaśnił warunki początkującemu użytkownikowi. Są zdezorientowani warunkami

.hg / hgrc - ten plik służy do repozytorium w lokalizacji lokalnej / w obszarze roboczym / w folderze .hg rzeczywistego repozytorium.

~ / .hgrc - ten plik jest inny niż poniższy. ten plik znajduje się w ~ lub katalogu domowym.

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

Jest to jedna z linii w sekcji [auth] sekcja / dyrektywa, przy użyciu rozszerzenia mercurial keyring. Upewnij się, że nazwa serwera, którą tam umieściłeś, pasuje do tego, czego używasz podczas wykonywania „klonowania hg”, w przeciwnym razie brelok powie: użytkownik nie został znaleziony. bb lub myremote w poniższym wierszu to „nazwa aliasu”, którą MUSISZ podać podczas wykonywania „hg clone http: /.../../ repo1 bb lub myremote”, inaczej nie zadziała lub musisz upewnić się, że Twój lokalny plik .hg / hgrc repozytorium zawiera ten sam alias, tzn. (co podałeś podczas klonowania hg .. jako ostatni parametr).

PS poniższe linki dla jasnych szczegółów, przepraszam za szybko napisaną gramatykę.

np .: jeśli wewnątrz ~ / .hgrc (katalog domowy użytkownika w Linux / Unix) lub mercurial.ini w Windows w katalogu osobistym użytkownika, zawiera następujący wiersz i jeśli tak

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

, nigdy nie będziesz monitowany o podanie poświadczeń użytkownika więcej niż raz na link do repozytorium http. W ~ / .hgrc w [rozszerzeniach] wiersz „mercurial_keyring =” lub „hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py” .. jedna z tych linii powinna tam być.

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

Próbuję dowiedzieć się, jak ustawić właściwość PREFIX, aby użytkownik mógł klonować lub wykonywać dowolne operacje Hg bez monitów o nazwę użytkownika / hasło i nie martwiąc się o to, o czym wspomniał w http: // .... / ... nazwa serwera podczas korzystania z linku repozytorium Hg. Może to być adres IP, nazwa serwera lub nazwa FQDN serwera

AKS
źródło
4

instalacja mercurial_keyring w Mac OSX przy użyciu MacPorts:

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

Dodaj następujące elementy do ~ / .hgrc:

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

[extensions]
mercurial_keyring =
ftvs
źródło
W TortoiseHg pojawia się komunikat „Brak modułu o nazwie mercurial_keyring” po uruchomieniu tych poleceń i zaktualizowaniu mojego pliku .hgrc.
Dunc,
Upewnij się, że masz odpowiednią wersję Pythona, jak opisano tutaj: stackoverflow.com/questions/5173197/...
phm
2

Jeśli używasz TortoiseHg, musisz wykonać te trzy kroki pokazane na załączonym zrzucie ekranu, to doda twoje dane uwierzytelniające do konkretnego repozytorium, z którym pracujesz.

wprowadź opis zdjęcia tutaj

Aby dodać ustawienia globalne, możesz uzyskać dostęp do pliku C: \ users \ user.name \ mercurial.ini i dodać sekcję

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

Mam nadzieję że to pomoże.

AB
źródło
0

Chociaż może, ale nie musi, działać w twojej sytuacji, uznałem, że przydatne jest generowanie klucza publicznego / prywatnego za pomocą Pageant Putty'ego.

Jeśli pracujesz również z bitbucket (.org), powinien on dać ci możliwość dostarczenia klucza publicznego do twojego konta użytkownika, a wtedy polecenia docierające do repozytorium zostaną zabezpieczone automatycznie.

Jeśli program Pageant nie uruchomi się po ponownym uruchomieniu, możesz dodać skrót do programu Pageant do „menu Start” systemu Windows, a skrót może wymagać wypełnienia „właściwości” lokalizacją pliku prywatnego (.ppk) .

Po wdrożeniu Mercurial i lokalne repozytoria będą musiały zostać skonfigurowane do push / pull w formacie SSH.

Oto kilka szczegółowych instrukcji na stronie Atlassian dla Windows OR Mac / Linux.

Nie musisz mi wierzyć na słowo i nie ma wątpliwości, że można to zrobić inaczej. Być może te kroki opisane tutaj są dla Ciebie bardziej:

  1. Uruchom PuttyGen od Start -> PuTTY-> PuttyGen
  2. Wygeneruj nowy klucz i zapisz go jako plik .ppk bez hasła
  3. Użyj Putty, aby zalogować się na serwerze, z którym chcesz się połączyć
  4. Dołącz tekst klucza publicznego z PuttyGen do tekstu ~ / .ssh / Author_keys
  5. Utwórz skrót do pliku .ppk z poziomu Start -> Putty na Start -> Uruchamianie
  6. Wybierz skrót .ppk z menu Autostart (nastąpi to automatycznie przy każdym uruchomieniu)
  7. Widzisz ikonę Korowód na pasku zadań? Kliknij go prawym przyciskiem myszy i wybierz „Nowa sesja”
  8. Wpisz nazwę użytkownika @ nazwa hosta w polu „Nazwa hosta”
  9. Zaloguj się teraz automatycznie.
veeTrain
źródło
0

Użyj rozszerzenia kluczy. Dodaj poniższy wpis do pliku mercurial.ini.

[rozszerzenia] mercurial_keyring =

sudarsan - 406
źródło