Acreditarea stocurilor
Dacă utilizați transportul SSH pentru a vă conecta la serverele la distanță, puteți utiliza cheia fără parolă, ceea ce vă va permite să transferați datele în siguranță fără a introduce un nume de utilizator și o parolă. Cu toate acestea, acest lucru nu este posibil prin utilizarea protocoalelor HTTP - fiecare conexiune necesită o pereche de login, parolă. Este încă mult mai dificil pentru sistemele cu autentificare cu doi factori, atunci când expresia pe care o folosiți ca parolă este generată aleatoriu și este dificil de reprodus.
Din fericire, Git are un sistem de gestionare a creditelor care poate ajuta în acest sens. În Git "out of the box" există mai multe opțiuni:
În mod implicit, Git nu citează acreditările deloc. Fiecare conexiune vă va cere logarea și parola.
În modul "cache", acreditările sunt stocate în memorie pentru o anumită perioadă de timp. Niciuna dintre parole nu este salvată vreodată pe disc și toate sunt eliminate din cache în 15 minute.
În modul "magazin", acreditările sunt stocate pe o perioadă nedeterminată într-o formă clară într-un fișier de pe disc. Aceasta înseamnă că, până când schimbați parola pe serverul Git, nu mai trebuie să introduceți acreditările. Dezavantajul acestei abordări este că parola dvs. este păstrată într-o formă clară într-un fișier din directorul de acasă.
Putem selecta una dintre aceste metode prin schimbarea setărilor Git:
Unii dintre acești ajutoare au opțiuni. Asistentul magazinului poate accepta argumentul --file
/.git-credentials). Asistentul "cache" are opțiunea -timeout
Git vă permite să configurați mai mulți asistenți simultan. Când căutați acreditări pentru un anumit server, Git va interoga acreditările în ordine și se va opri la primirea primului răspuns. La salvarea acreditărilor, Git le va trimite tuturor asistenților din listă, care la rândul lor pot decide ce să facă cu aceste date. Iată cum va arăta .gitconfig. dacă aveți un fișier cu acreditări pe o unitate flash, dar, în caz de absență, doriți să utilizați suplimentar cache-ul în memoria RAM.
Sub capota
Aceasta este echipa care începe interacțiunea.
După aceasta, credința Git așteaptă date din fluxul de intrare standard. Noi îi transmitem ceea ce știm: protocolul și numele serverului.
Un șir gol indică faptul că intrarea este completă și sistemul de gestionare a creditelor trebuie să răspundă la ceea ce știe.
După aceasta, acreditarea Git efectuează un fel de muncă și afișează informațiile detectate.
În cazul în care nu se găsesc acreditări, Git solicită utilizatorului login / parola și le trimite înapoi la fluxul de ieșire implicat (în acest exemplu, aceasta este aceeași consola).
De fapt, sistemul de gestionare a acreditărilor solicită programe care sunt separate de Git în sine; ce și cum depinde, în special, de setările credential.helper. Există mai multe modalități de a apela:
Deci, ajutoarele descrise mai sus sunt numite, de fapt, cache-credințe-git. git-credential-store etc. și le putem configura să accepte argumentele liniei de comandă. Forma generală pentru acest git-credential-foo [args]
obțineți o solicitare de conectare și parolă.
stocați solicitarea de a stoca acreditările în memoria asistentului.
erase elimină acreditările pentru parametrii specificați din memoria utilizată de ajutor.
Operațiile de stocare și ștergere nu necesită un răspuns (în orice caz, Git o ignoră). Cu toate acestea, pentru Git, este foarte important ca ajutorul să răspundă la operația de obținere. Dacă ajutorul nu știe nimic util, el poate să-și termine treaba fără a scoate nimic, dar dacă știe - ar trebui să adauge informații la informațiile pe care le are. Rezultatul este tratat ca un set de operațiuni de atribuire; Valorile derivate vor înlocui cele pe care Git le-a cunoscut înainte.
Mai jos este un exemplu folosit mai devreme, dar în loc de git-credential, git-credential-store este apelat direct:
git-credential-store returnează numele de utilizator și parola, pe care le-am salvat mai devreme.
Mai jos este conținutul fișierului
Este doar un set de șiruri de caractere, fiecare conținând o adresă URL care include acreditări. Asistenții osxkeychain și winstore folosesc formatele care stau la baza lor, iar memoria cache utilizează propriul format de memorie în memoria internă (pe care alte procese nu o pot citi).
Stocare de acreditare proprie
Trebuie să acordăm atenție unei singure operațiuni; depozitarea și ștergerea sunt operațiuni de scriere, deci nu vom face nimic atunci când sunt primite.
Formatul de fișier cu acreditările partajate este același cu cel al magazinului Git-credential-store.
Locația acestui fișier este mai mult sau mai puțin standard, dar, în caz contrar, trebuie să permitem utilizatorilor să își transfere propriile căi.
Aici analizăm argumentele liniei de comandă, permițându-ne să specificăm fișierul de intrare pentru utilizatori. Implicit aceasta este
Acest program răspunde numai dacă operația se obține și există fișierul de stocare.
Această bucată citește conținutul fișierului din magazin, efectuând o căutare de potrivire. Dacă protocolul și serverul de la cunoscute corespund liniei curente, programul emite rezultatul și iese.
Îi vom salva pe ajutător ca git-credential-numai pentru citire. plasați-l într-unul din directoarele din PATH și faceți-l executabil. Mai jos este ceea ce arată sesiunea de interacțiune:
Deoarece numele său începe cu "git-", putem folosi o sintaxă simplă pentru a configura:
După cum puteți vedea, extinderea acestui sistem este destul de simplă și acest lucru vă permite să rezolvați unele probleme comune pe care le puteți avea și dumneavoastră și echipa dumneavoastră.