Mai mult
Cum pentru a specifica privat SSH-cheie pentru a utiliza atunci când execută comenzi shell pe Git?
O situație destul de neobișnuită poate, dar vreau să specificați un privat SSH-cheie pentru a utiliza atunci când execută un shell (git) comanda de pe computerul local.
Practic astfel:
git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"
Sau chiar mai bine (în Ruby):
with_key("/home/christoffer/ssh_keys/theuser") do
sh("git clone git@github.com:TheUser/TheProject.git")
end
Am văzut exemple de conectarea la un server de la distanță cu Net::SSH care folosește o anumită cheie privată, dar acest lucru este un local de comandă. Este posibil?
954
24
Niciuna dintre aceste soluții nu a lucrat pentru mine.
În schimb, am elaborat pe @Martin v. Löwis 's mai vorbim de a stabili un "config" fișierul pentru SSH.
SSH va arata pentru utilizator's `~/.ssh/config file. Eu pe al meu setup ca:
Și adaug-o la distanță git repository:
Și apoi git comenzi de lucru în mod normal pentru mine.
NOTE
IdentitiesOnly da
este necesar pentru a a preveni SSH comportamentul implicit de a trimite identitatea fișier de potrivire implicit de fișier pentru fiecare protocol. Dacă aveți un fișier cu numele~/.ssh/id_rsa
care vor fi încercate ÎNAINTE de ta `~/.ssh/id_rsa.github fără această opțiune.Bibliografie
Ceva de genul asta ar trebui sa mearga (sugerat de către orip):
dacă preferați subshells, ai putea încerca următoarele (deși este mult mai fragil):
Git va invoca SSH care va găsi agent de variabila de mediu; acesta, la rândul său, cheia încărcate.
Alternativ, setarea "ACASĂ" poate face, de asemenea truc, dacă ești dispus să setup un director care conține numai un
.ssh
director ca "ACASĂ"; acest lucru poate conține o identitate.pub, sau o config setarea IdentityFile.Alte persoane's sugestii despre
~/.ssh/config
sunt foarte complicate. Acesta poate fi la fel de simplu ca:Pornind de la Git 2.3.0 avem, de asemenea, simplă comandă (nici un fișier de configurare este necesar):
Aveți nevoie de un restart pentru serviciul ssh pe mașina dumneavoastră.
Conținutul de my_git_ssh_wrapper:
Apoi, puteți utiliza tastele de a face:
Pentru a rezuma răspunsurile și commentscel mai bun mod de a configura git de a utiliza diferite fișiere cheie și apoi uita despre asta, care sprijină, de asemenea, utilizatori diferiți pentru aceeași gazdă (de exemplu, un personal de pe contul GitHub și o), care funcționează pe Windows la fel de bine, este de a edita
~/.ssh/config "(sau " c:\Users\<dvs. de utilizator>\.ssh\config
) și să specificați mai multe identități:Apoi, pentru a clona un proiect ca dvs. personal de utilizator, trebuie doar să rulați regulat `git clona comandă.
Pentru a clona repo ca
workuser
, rungit clona git@github-work:company/project.git
.Cu git 2.10+ (T3 2016: lansat Sept. 2d, 2016), aveți posibilitatea să setați o configurare pentru
GIT_SSH_COMMAND
(și nu doar o variabilă de mediu așa cum este descris în Rober Jack Va's răspunde)A se vedea comite 3c8ede3 (26 Iunie 2016) până la Nguyễn-Leaáam Ngọc Duy (
pclouds
). (Fuzionat cu Junio C Hamano --gitster
-- în comite dc21164, 19 Iulie 2016)Aceasta înseamnă
git clona
poate fi:După cum se menționează aici: https://superuser.com/a/912281/607049
Puteți să-l configurați pe-repo:
O modalitate mai bună idee să adaug că host sau ip la `.ssh/config file astfel:
M-am dus cu GIT_SSH variabilă de mediu. Aici's înveliș mea, similară cu cea de la Joe Bloc de mai sus, dar se ocupă de orice sumă de argumente.
Fișierul ~/gitwrap.sh
Apoi, în a mea .bashrc, se adaugă următoarele:
Problema este atunci când aveți diferite depozitele de la distanță pe aceeași gazdă (sa zicem github.com), și doriți pentru a interacționa cu ei folosind diferite chei ssh (de exemplu, diferite GitHub conturi).
În scopul de a face asta:
Făcând acest lucru vă asocia la a doua cheie cu un nou nume prietenos "XXX" pentru github.com.
2), Atunci trebuie să modificați de la distanță originea special de depozit, astfel încât acesta utilizează numele prietenos te'am juste definite.
Du-te la depozit local folder într-un prompt de comandă și de afișare curent de la distanță origine:
Apoi schimba origine cu:
Acum puteți împinge, aduce cu tasta dreapta în mod automat.
Dacă nici una dintre soluțiile de lucru pentru tine, și ați creat mai multe ssh-chei, dar încă nu poate face lucruri simple cum ar fi
apoi, presupunând că aveți două chei ssh fișiere, cum ar fi
apoi în interiorul git repo, încercați:
și, de asemenea, asigurați-vă că github implicit numele de utilizator și id-ul de utilizator sunt corecte prin:
Vezi https://gist.github.com/jexchan/2351996 pentru mai multe informații.
Multe dintre aceste soluții uitat ispititoare. Cu toate acestea, am găsit generic git-ambalaj-script abordare la link-ul următor pentru a fi cele mai utile:
Cum pentru a Specifica o Cheie ssh File cu
git
commandIdeea fiind că nu există nici o
git
de comandă cum ar fi următoarele:Alvin's soluție este de a utiliza un bine definite bash script înveliș care umple acest gol:
Unde git.sh` este:
Pot confirma că acest lucru s-a rezolvat problema am avut cu user/cheie de recunoaștere pentru o distanță bitbucket repo cu
git de actualizare de la distanță
,git pull", și " git clona
; toate de care acum funcționează bine într-un cron job script care a fost de altfel nu are probleme de navigație limitată-shell. Am fost, de asemenea, capabil de a apela acest script din cadrul R și încă rezolva exact acelașicron
executa problema (de exemplu, sistemul("bash git.sh -i ~/.ssh/thatuserkey.pem pull")`).Nu că R este aceeași ca Ruby, dar daca-R face-o... O:-)
Atunci când aveți nevoie să se conecteze la github cu o cerere normală (
git pull origine master), setarea Gazdă ca
*in
~/.ssh/config` a lucrat pentru mine, orice altă Gazdă (de exemplu, "github" sau "gb") n't de lucru.Aveți nevoie pentru a crea un ~/.ssh/config de mai jos
permisiunea ca mai jos
Adăuga cheia publică în git (cat ~/.ssh/id_rsa_pub [sau simillar nume])
și apoi git clona de mai jos
dacă aveți director de pe calea ta în cazul în care doriți să semneze cu o anumită identifyfile puteți specifica pentru a utiliza o anumită identifica fișierul prin intermediul .ssh/config prin setarea
ControlPath
exemplu:gazdă github.com ControlPath ~/Proiectelor/locul de muncă/** HostName github.com IdentityFile ~/.ssh/id_work Utilizator git
Apoi
ssh
va utiliza specificate de identitate fișier atunci când faci git comenzi sub anumit traseu de lucru.În Windows cu Git Bash puteți utiliza următoarele opțiuni pentru a adăuga un depozit
ssh-agent bash -c 'ssh-add "cheie-adresa"; git remote adauga origine "rep-adresa"'
de exemplu:ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote adauga origine git@git.test.com:test/test.git'
Care cheia privată este, în unitatea D, dosar test de calculator. De asemenea, dacă doriți pentru a clona un depozit, puteți schimbagit remote adauga origine " cu " git clona
.După ce introduceți acest lucru la Git Bash, vi se va cere pentru o frază de acces!
Fi Conștienți de faptul că openssh cheie privată și chit cheie privată sunt diiferent!
Dacă ați creat cheile cu puttygen, trebuie să efectuați conversia cheia privată pentru a openssh!
pentru gitlab
RSAAuthentication da
doc este aici
Ai putea folosi GIT_SSH variabilă de mediu. Dar va trebui să-și încheie ssh și opțiuni într-un script de shell.
Vezi git manual:
om git
în comandă shell.