如何使用多个不同账户和主机的ssh密钥

我有多个SSH密钥,同时在Bitbucket和GitHub上也有账户。每当我使用pull命令时,都会出现错误。
:/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).

如何解决这个问题并在不同的账户中使用不同的密钥。

http://stackoverflow.com/questions/7927750/specify-an-ssh-key-for-git-push-for-a-given-domain - Ciro Santilli OurBigBook.com
2个回答

这些都是从网站和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代理中。
一个用于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

注意:我在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,有没有办法解决? - Gelin Luo