Come salvare nome utente e password con Mercurial?


271

Ho usato Mercurial in un progetto personale e ho digitato il mio nome utente e la mia password ogni volta che voglio inviare qualcosa al server.

Ho provato ad aggiungere quanto segue al .hgrcfile nella mia directory home, ma sembra essere completamente ignorato.

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

Come farlo nel modo giusto?

Risposte:


330

Puoi creare una sezione di autenticazione nel tuo file .hgrco Mercurial.ini, in questo modo:

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

La parte 'bb' è un identificatore arbitrario e viene utilizzata per abbinare il prefisso con nome utente e password - utile per gestire diverse combinazioni di nome utente / password con diversi siti (prefisso)

Puoi anche specificare solo il nome utente, quindi dovrai solo digitare la tua password quando premi.

Consiglierei anche di dare un'occhiata all'estensione del portachiavi . Poiché memorizza la password nel portachiavi del sistema anziché in un file di testo semplice, è più sicuro. È fornito in bundle con TortoiseHg su Windows e attualmente è in corso una discussione sulla distribuzione come estensione in bundle su tutte le piattaforme.


3
Perché non funziona quando il server è: ssh: // HGSERVER? neanche il formato "ssh: // nome utente: password @ HGSERVER" funziona ..
Oren

1
@Oren - guarda il commento qui sotto - se stai usando SSH, perché non usare l'accesso basato su chiave?
David Eads

@santafebound Come dice il testo, è "arbitrario" e viene utilizzato solo per associare il nome utente e la password con il prefisso, quindi fornisci qualsiasi tag che abbia senso per te.
Chris McCauley

Non consiglierei davvero di memorizzare le password in testo normale (che è ciò che fa questa risposta, anche se menziona anche brevemente un'alternativa migliore).
Jasper

171

Ci sono tre modi per farlo: usa il file .hgrc, usa ssh o usa l'estensione portachiavi


1. Il modo INSECURO - aggiorna il tuo file ~ / .hgrc

Il formato che funziona per me (nel mio file ~ / .hgrc) è questo

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

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


Puoi configurare tutti i repository che desideri aggiungendo più terzine di prefisso, nome utente, password anteponendo un tag univoco.

Funziona solo in Mercurial 1.3 e ovviamente il nome utente e la password sono in testo normale - non va bene.


2. Il modo sicuro - Usa SSH per EVITARE l'utilizzo di password

Mercurial supporta completamente SSH in modo da poter trarre vantaggio dalla capacità di SSH di accedere a un server senza password : esegui una configurazione una tantum per fornire un certificato auto-generato. Questo è di gran lunga il modo più sicuro per fare ciò che vuoi.


Puoi trovare ulteriori informazioni sulla configurazione dell'accesso senza password qui


3. L'estensione portachiavi

Se desideri un'opzione sicura, ma non hai familiarità con SSH, perché non provarla?

Dai documenti ...

L'estensione richiede la password HTTP al primo pull / push a / da un dato repository remoto (proprio come avviene per impostazione predefinita), ma salva la password (codificata dalla combinazione di nome utente e URL del repository remoto) nel database delle password. Alla successiva esecuzione, controlla il nome utente in .hg / hgrc, quindi la password adatta nel database delle password e utilizza quelle credenziali se trovate.

Ci sono informazioni più dettagliate qui


3
Satoru, Chris non sta parlando di mercurial, ma di ssh: ssh può essere impostato in modo da non doverti identificare usando una password (come descritto ad esempio qui: debian-administration.org/articles/152 ).
Tomislav Nakic-Alfirevic

4
Il metodo 2 è davvero l' unico modo per gestire le cose in modo sicuro e mantenere le autorizzazioni a livello di utente sul sistema remoto.
Peter Rowell

2
La risposta di user570626 sull'utilizzo dell'integrazione del portachiavi è molto meglio di uno di questi. @Peter Rowell: la configurazione di ssh è un vero problema se hai pochi utenti e repository; hai bisogno di utenti unix locali e devi giocare con la limitazione dei comandi che possono essere eseguiti con .ssh / authorized_keys e uno shell wrapper. Non esattamente una soluzione pulita.
Draemon

5
@ Peter Rowell: 1. che differenza fa? Ho detto che la sua soluzione era migliore non prima. 2. Non ha nulla a che fare con l'ambiente di hosting, è puramente lato client (a differenza della tua soluzione SSH che richiede modifiche sul lato server per supportarla). 3. Lucidando sul trolling e vantandomi, continuo a dire che non è una soluzione pulita. Hai bisogno di un utente locale e devi dare loro l'accesso alla shell, quindi limitarlo. L'accesso alla shell non è sempre un'opzione sensata. Sono sorpreso che qualcuno della tua esperienza non abbia incontrato un amministratore di sistema che non volesse concedere l'accesso alla shell del servizio.
Draemon

2
@ Draemon: immagino che abbiamo esperienze diverse. Personalmente, non lavorerò su un sistema in cui non ho un prompt della shell. Mi rende completamente dipendente dall'altro sistema per aver già installato ciò di cui ho bisogno. La mia esperienza generale è che se non riesco a ricevere un prompt, quasi certamente non riesco a ottenere altri servizi che considero fondamentali per il mio flusso di lavoro. Colpi (chiave) diversi per persone diverse.
Peter Rowell

65

Nessuno ha menzionato l'estensione del portachiavi. Salverà il nome utente e la password nel portachiavi di sistema, che è molto più sicuro rispetto alla memorizzazione delle password in un file statico come menzionato sopra. Esegui i passaggi seguenti e dovresti essere a posto. L'ho installato e funzionante su Ubuntu in circa 2 minuti.

>> 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
Questa è la mia soluzione preferita. ... e solo per assecondare ciò che ha detto @hadrien, dopo le tre azioni descritte funziona a
meraviglia

Secondo @ngeek per avermi assecondato!
Hadrien

Almeno su Windows TortoiseHg supporta l'estensione portachiavi: Impostazioni globali -> Estensioni -> mercurial_keyring
user272735

Sfortunatamente attualmente l'estensione del portachiavi ha un bug su Windows in cui può salvare solo una password alla volta. Vedi questa domanda .
Laurens Holst

Questa sembra la soluzione migliore, ma quando provo a usarlo su OSX, python si segfa quando provo a ottenere la password dal portachiavi.
Isaac

30

Un semplice trucco consiste nell'aggiungere nome utente e password all'URL push nel .hg/hgrcfile del progetto :

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

(Nota che in questo modo memorizzi la password in testo normale)

Se stai lavorando su più progetti sotto lo stesso dominio, potresti voler aggiungere una regola di riscrittura nel tuo ~/.hgrcfile, per evitare di ripeterlo per tutti i progetti:

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

Di nuovo, poiché la password è memorizzata in testo normale, di solito memorizzo solo il mio nome utente.

Se lavori con Gnome, ti spiego come integrare Mercurial e il Portachiavi di Gnome qui:

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


Ho scaricato l'estensione, tuttavia, quando ho provato a fare un push il prompt della password si rifiuta di lasciarmi passare :( Forse l'ho fatto nel modo sbagliato. Non ho mai usato Gnome Keyring prima. Grazie lo stesso.
satoru

Potresti voler usare le opzioni --debug e --verbose per hg push per vedere cosa sta andando storto ...
Roberto Aloi

perfetto per il caso in questione ... se stai usando ssh, non è necessario passare una password ... ecco a cosa servono le chiavi
beauXjames

Supponendo che tu abbia il lusso di un dispositivo da cui puoi togliere la chiave pubblica, ovviamente.
David dato il

23

NESSUNO sopra spiegato / chiarito termini a un utente inesperto. Si confondono con i termini

.hg / hgrc: questo file viene utilizzato per il repository, nella posizione locale / dell'area di lavoro / nella cartella .hg del repository effettivo.

~ / .hgrc: questo file è diverso da quello sotto. questo file risiede in ~ o nella directory home.

mioremote.xxxx = ..... bb.xxxx = ......

Questa è una delle righe nella sezione / direttiva [auth], mentre si usa l'estensione portachiavi Mercurial. Assicurati che il nome del server che hai inserito, corrisponda a quello che usi mentre fai "hg clone" altrimenti il ​​portachiavi dirà, utente non trovato. bb o myremote nella riga sottostante, sono "nome alias" che DEVI dare mentre fai "hg clone http: /.../../ repo1 bb o myremote" altrimenti non funzionerà o devi assicurarti che il tuo locale Il file .hg / hgrc del repository contiene lo stesso alias, cioè (quello che hai dato mentre facevi hg clone .. come ultimo parametro).

PS i seguenti link per dettagli chiari, scusate per la grammatica scritta velocemente.

es: se all'interno di ~ / .hgrc (directory home dell'utente in Linux / Unix) o mercurial.ini in Windows nella home directory dell'utente, contiene, la riga seguente e se lo fai

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

, quindi non ti verranno mai richieste le credenziali utente più di una volta per collegamento al repository http. In ~ / .hgrc sotto [extensions] una riga per "mercurial_keyring =" o "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" .. una di queste righe dovrebbe essere lì.

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

Sto cercando di scoprire come impostare la proprietà PREFIX in modo che l'utente possa clonare o eseguire qualsiasi operazione Hg senza richieste di nome utente / password e senza preoccuparsi di ciò che ha menzionato in http: // .... / ... per servername durante l'utilizzo del collegamento repo Hg. Può essere IP, servername o FQDN del server


4

Mercurial_keyring installazione su Mac OSX utilizzando MacPorts:

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

Aggiungi quanto segue a ~ / .hgrc:

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

[extensions]
mercurial_keyring =

Non ottengo "nessun modulo denominato mercurial_keyring" in TortoiseHg dopo aver eseguito questi comandi e aggiornato il mio file .hgrc.
Dunc

Assicurati di avere la versione Python corretta, come descritto qui: stackoverflow.com/questions/5173197/…
phm

2

Se stai usando TortoiseHg devi eseguire questi tre passaggi mostrati nella schermata allegata, questo aggiungerebbe le tue credenziali per il repository specifico con cui stai lavorando.

inserisci qui la descrizione dell'immagine

Per aggiungere impostazioni globali è possibile accedere al file C: \ users \ user.name \ mercurial.ini e aggiungere la sezione

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

Spero che sia di aiuto.


0

Anche se può o non può funzionare nella tua situazione, ho trovato utile generare una chiave pubblica / privata usando Putty's Pageant.

Se stai lavorando anche con bitbucket (.org), dovrebbe darti la possibilità di fornire una chiave pubblica al tuo account utente e quindi i comandi che raggiungono il repository saranno protetti automaticamente.

Se Pageant non si avvia per te al riavvio, puoi aggiungere un collegamento a Pageant al "menu Start" di Windows e il collegamento potrebbe dover avere una "proprietà" popolata con la posizione del tuo file privato (.ppk) .

Con questo in atto, Mercurial e i tuoi repository locali dovranno essere configurati per push / pull utilizzando il formato SSH.

Di seguito sono riportate alcune istruzioni dettagliate sul sito Atlassian per Windows OPPURE Mac / Linux.

Non devi credermi sulla parola e senza dubbio ci sono altri modi per farlo. Forse questi passaggi descritti qui sono più adatti a te:

  1. Avvia PuttyGen da Start -> PuTTY-> PuttyGen
  2. Genera una nuova chiave e salvala come file .ppk senza passphrase
  3. Usa Putty per accedere al server a cui vuoi connetterti
  4. Aggiungi il testo della chiave pubblica da PuttyGen al testo di ~ / .ssh / authorized_keys
  5. Crea un collegamento al tuo file .ppk da Start -> Putty to Start -> Startup
  6. Seleziona il collegamento .ppk dal menu Startup (questo avverrà automaticamente ad ogni avvio)
  7. Vedi l'icona dello spettacolo nella barra delle applicazioni? Fai clic con il pulsante destro del mouse e seleziona "Nuova sessione"
  8. Immettere nome utente @ nome host nel campo "Nome host"
  9. Ora accederai automaticamente.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.