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

如何在不同的账户和主机上使用多个 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 网站,它会给出错误 ass public key denied

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

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

答案1

这些都是从网站和 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

注意:我在 bitbucket 上为 2 个不同的帐户使用了 2 个不同的密钥,在 github 上为 1 个不同的帐户使用了 2 个不同的密钥。

现在我们需要告诉 git 存储库使用哪个主机,以便我获取该特定帐户的特定 ssh 密钥

改成[email protected]/yyyproject.gitgit@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 做一些修改

我们的网址是这样的

[email protected]: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 密钥与哪个主机一起使用。

现在我们可以轻松地拉、推。

答案2

~/.ssh/config像这样配置:

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

然后在 git url 中使用自定义主机名而不是真实域:

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/

相关内容