问题描述
我有多个 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).
我怎样才能解决这个问题并对不同的帐户使用不同的密钥。
最佳办法
这都是从网站和stackoverflow收集的,希望这对ssh的新手有所帮助
所以你可以有很多 ssh 密钥
~/.ssh$ ls
yyy_id_rsa yyy_id_rsa.pub id_rsa id_rsa.pub known_hosts
注意:我们需要将 then 添加到 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
注意:我在 bitbucket 上为 2 个不同的帐户使用了 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进行一些更改
我们的网址是这样的
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 密钥用于哪个主机。
现在我们可以轻松地拉、推。