Jak używać wielu kluczy ssh z różnymi kontami i hostami

21

mam wiele kluczy ssh i mam również konto na bitbucket i github. jak zawsze, gdy używam pull, daje mi to błąd

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

lub jeśli ssh na stronie bitbucket, daje błąd w dupie klucz publiczny odrzucony

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

jak mogę rozwiązać ten problem i używać różnych kluczy z różnymi kontami.

Iori
źródło
stackoverflow.com/questions/7927750/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

21

Wszystko to jest zebrane ze strony internetowej i przepełnienia stosu, mam nadzieję, że pomoże to nowym użytkownikom ssh

więc możesz mieć wiele kluczy ssh

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

Uwaga: musimy dodać następnie do ssh-agent, prawdopodobnie id_rsa zostanie dodany, więc musimy dodać drugi klucz prywatny

~/.ssh$ ssh-add yyy_id_rsa

teraz dodaliśmy oba klucze ssh do ssh-agent

mamy jeden na bitbucket i jeden na github

więc tworzymy taki plik konfiguracyjny

~/.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

Uwaga: używam 2 różnych kluczy dla 2 różnych kont na bitbucket i jednego dla github.

Teraz musimy powiedzieć repozytorium git, którego hosta użyć, aby uzyskać konkretny klucz ssh dla tego konkretnego konta

zmień [email protected]/yyyproject.gitnagit@bit-yyyuser:yyyuser/yyyproject.git

więc w folderze projektu i dodaj zdalny adres URL

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

w innym projekcie

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

teraz możesz łatwo korzystać z funkcji push i pull

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

i inny 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$ 

teraz nie mam projektu github na lokalnej maszynie, więc musimy sklonować projekt, ale musimy wprowadzić niewielką zmianę adresu URL do klonowania

nasz adres URL jest taki

[email protected]:xxxuser/python.git

ponieważ musimy go sklonować za pomocą określonych kluczy, musimy tylko zmienić nazwę hosta na hosta, który zdefiniowaliśmy

git@git-xxxuser:xxxuser/python.git

jak zdefiniowano w pliku konfiguracyjnym

a teraz możemy sklonować

:/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$ 

zidentyfikowaliśmy różne klucze ssh dla różnych hostów, jeden dla git i jeden dla bitbucket, teraz system wie, które klucze ssh powinny być używane z danym hostem.

Teraz możemy łatwo ciągnąć, pchać.

Iori
źródło
Co się stanie, jeśli mój adres URL git korzysta z protokołu https? W każdym razie nad tym popracować?
Gelin Luo