Как использовать несколько ключей 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-agent, возможно, будет добавлен id_rsa, поэтому нам нужно добавить другой закрытый ключ

~/.ssh$ ssh-add yyy_id_rsa

Теперь мы добавили оба ключа ssh в ssh-agent

у нас есть один для 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 разных ключа для 2 разных учетных записей на bitbucket и один для 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.