So verwenden Sie mehrere SSH-Schlüssel mit unterschiedlichen Konten und Hosts

21

Ich habe mehrere SSH-Schlüssel und ich habe auch Konto auf Bitbucket und Github. Wie auch immer ich Pull benutze, es gibt mir Fehler

:/var/www/proj$ git pull origin master
conq: repository access denied.
fatal: The remote end hung up unexpectedly

oder wenn ich die Bitbucket-Website ssh es gibt Fehler ass öffentlichen Schlüssel verweigert

:~$ ssh [email protected]
Permission denied (publickey).

Wie kann ich dieses Problem lösen und verschiedene Schlüssel mit verschiedenen Konten verwenden?

Iori
quelle

Antworten:

21

Dies wird alles von der Website und dem Stackoverflow zusammengetragen. Ich hoffe, dies hilft denjenigen, die neu bei ssh sind

Sie können also viele SSH-Schlüssel haben

~/.ssh$ ls
yyy_id_rsa  yyy_id_rsa.pub  id_rsa  id_rsa.pub  known_hosts

Hinweis: Wir müssen dann zum ssh-agent hinzufügen, wahrscheinlich wird id_rsa hinzugefügt, also müssen wir den anderen privaten Schlüssel hinzufügen

~/.ssh$ ssh-add yyy_id_rsa

Jetzt haben wir beide ssh-Schlüssel zu ssh-agent hinzugefügt

Wir haben einen für Bitbucket und einen für Github

Also erstellen wir eine solche Konfigurationsdatei

~/.ssh$ nano config
Host bit-yyyuser bitbucket.org
Hostname bitbucket.org
IdentityFile ~/.ssh/yyy_id_rsa
User yyyuser

Host bit-xxxuser bitbucket.org
Hostname bitbucket.org
IdentityFile ~/.ssh/id_rsa
User xxxuser

Host git-xxxuser github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa
User xxxuser

Hinweis: Ich verwende 2 verschiedene Schlüssel für 2 verschiedene Konten auf Bitbucket und einen für Github.

Jetzt müssen wir dem Git-Repository mitteilen, welcher Host verwendet werden soll, damit ich diesen speziellen SSH-Schlüssel für dieses spezielle Konto erhalte

wechseln [email protected]/yyyproject.gitzugit@bit-yyyuser:yyyuser/yyyproject.git

also im Projektordner und füge die Remote-URL hinzu

/var/www/yyyproject$ git remote add bit git@bit-yyyuser:yyyuser/yyyproject.git

in einem anderen Projekt

/var/www/xxxproject$ git remote add bitt git@bit-xxxuser:xxxuser/xxxproject.git

Jetzt können Sie einfach drücken und ziehen

:/var/www/yyyproject$ git pull bit master
From bit-yyyuser:yyyuser/yyyproject
 * branch            master     -> FETCH_HEAD
Already up-to-date.
:/var/www/yyyproject$

und ein anderes Projekt

/var/www/xxxproject$ git push bitt ver1
To git@bit-xxxuser:xxxuser/xxxproject.git
 * branch            master     -> FETCH_HEAD
Already up-to-date.
:/var/www/xxxproject$ 

Jetzt habe ich das Github-Projekt nicht auf dem lokalen Computer, daher müssen wir das Projekt klonen, aber wir müssen die URL zum Klonen ein wenig ändern

Unsere URL ist wie folgt

[email protected]:xxxuser/python.git

Da wir es mit bestimmten Schlüsseln klonen müssen, müssen wir nur den Hostnamen mit dem von uns definierten Host ändern

git@git-xxxuser:xxxuser/python.git

wie in der Konfigurationsdatei definiert

und jetzt können wir klonen

:/var/www/us$ git clone git@git-xxxuser:xxxuser/python.git
Cloning into 'python'...
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 75 (delta 18), reused 62 (delta 8)
Receiving objects: 100% (75/75), 6.29 KiB, done.
Resolving deltas: 100% (18/18), done.
:/var/www/us$ 

Wir haben verschiedene SSH-Schlüssel für verschiedene Hosts identifiziert, einen für Git und einen für Bitbucket. Jetzt weiß das System, welche SSH-Schlüssel mit welchem ​​Host verwendet werden sollen.

Jetzt können wir leicht ziehen, schieben.

Iori
quelle
Was ist, wenn meine Git-URL https verwendet? Wie auch immer, daran zu arbeiten?
Gelin Luo
1

Ich konfiguriere ~/.ssh/configwie folgt:

Host gitlab-as-thuc  
    HostName git.thuc.com
    User git
    IdentityFile ~/.ssh/id_rsa.thuc
    IdentitiesOnly yes

Verwenden Sie dann den benutzerdefinierten Hostnamen anstelle der echten Domain in der Git-URL:

git remote add thuc git@gitlab-as-thuc:your-repo.git  

Weitere Informationen finden Sie hier: http://itblog.study.land/how-to-specify-different-ssh-keys-for-git-push-for-a-given-domain/

Thucnguyen
quelle