Як використовувати кілька ключів ssh з різними обліковими записами та хостами


21

У мене є декілька ключів ssh, а також у мене є обліковий запис на bitbucket та github. як коли-небудь я використовую тягнути це дає мені помилку

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

або якщо я ssh на веб-сайті bitbucket, він видає помилки в жодному відкритому ключі

:~$ ssh git@bitbucket.org
Permission denied (publickey).

як я можу це вирішити і використовувати різні ключі з різними обліковими записами.


Відповіді:


21

Це все зібране з веб-сайту та stackoverflow, сподіваємось, це допоможе новачкам у ssh

тож у вас може бути багато ключів ssh

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

Примітка: нам потрібно додати потім до ssh-агента, ймовірно, буде доданий id_rsa, тому нам потрібно додати інший приватний ключ

~/.ssh$ ssh-add yyy_id_rsa

тепер ми додали обидва ключі ssh до ssh-агента

у нас є один для bitbucket і один для github

тому ми створюємо такий конфігураційний файл

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

Примітка. Я використовую 2 різні клавіші для двох різних облікових записів у бітбукеті та одного для github.

Тепер нам потрібно сказати репозиторію git, який хост використовувати, щоб я отримав специфічний ключ ssh для цього конкретного облікового запису

зміни git@bitbucket.orgyyyuser/yyyproject.gitнаgit@bit-yyyuser:yyyuser/yyyproject.git

тому у папці проекту та додайте віддалений URL

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

в іншому проекті

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

тепер ви можете легко натискати і тягнути

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

та ще один проект

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

тепер у мене немає проекту github на локальній машині, тому нам потрібно клонувати проект, але нам потрібно внести невеликі зміни в URL для клонування

наша URL-адреса така

git@github.com:xxxuser/python.git

тому що ми повинні клонувати його певними ключами, нам просто потрібно змінити ім'я хоста з визначеним нами хостом

git@git-xxxuser:xxxuser/python.git

як визначено у конфігураційному файлі

і тепер ми можемо клонуватись

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

ми визначили різні ключі ssh для різних хостів, один для git та один для bitbucket, тепер система знає, які ключі ssh використовувати для якого хоста.

Тепер ми можемо легко тягнути, штовхати.


Що робити, якщо моя git URL використовує https? Все одно працювати над цим?
Гелін Луо

1

Я конфігурую ~/.ssh/configтак:

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

потім використовуйте власну назву хоста замість реального домену в URL-адресі git:

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

Детальніше читайте тут: http://itblog.study.land/how-to-specify-different-ssh-keys-for-git-push-for-a-given-domain/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.