当前位置:   article > 正文

github 多个账号共享ssh key 的设置方法_github多账户ssh

github多账户ssh

确认本机是否已有ssh key

首先确认自己系统内有没有 ssh key。
bash复制代码cd ~/.ssh

ls *.pub # 列出所有公钥文件

id_rsa.pub
  • 1
  • 2
  • 3

若有,确认使用当前 key 或者生成新 key,若没有,生成新 key。由于我需要登录两个帐号,所以在已经存在的 key 的基础上,再生成一个 key。
生成 ssh key

ssh-keygen -t rsa -C "your-email-address"
  • 1

-t 是使用的算法,一般都选择 rsa -C 为备注,一般以邮箱作为备注,提示保存文件时以 id_rsa_work 保存,用于区分第一个密钥id_rsa。
至此,我的 ~/.ssh 文件夹内共有4个文件。

├── id_rsa
├── id_rsa_work
├── id_rsa_work.pub
├── id_rsa.pub
└── known_hosts
  • 1
  • 2
  • 3
  • 4
  • 5

其中以 .pub 结尾的为公钥文件,用于填写在GitHub网站,同名不带 .pub 后缀的为私钥文件,自己保存不要泄漏,known_hosts 文件为已知 host 缓存,目的是加快 ssh 访问速度。

添加 ssh key

GitHub 添加 ssh key
登录 GitHub 在账户
Settings > SSH and GPG keys > New SSH key > Add key 将之前生成的 ssh key 的 pub 文件中的内容粘贴进去,另一个账户也如法炮制。
为本机添加 ssh key

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_work
  • 1
  • 2

如果成功会看到 Identity added 的反馈。

检查ssh key

关于ssh有一个奇怪的三角恋。 在这段特殊的浪漫故事中有三个角色:

ssh-agent命令

  • 保存身份验证密钥(身份)并与 ssh 共享的程序
    ssh命令
  • 键入 ssh 时使用的远程登录客户端
    ~/.ssh/config文件 - 可用于向 ssh 客户端提供选项的配置文件

让我们看看这些是如何一起玩的。

  • 第一站,ssh-agent。 这为您保存着您的钥匙。 在 ssh-agent (man ssh-agent) 的使用说明中:多个身份可以同时存储在 ssh-agent 中,如果存在,ssh 将自动使用它们。

这意味着:当 ssh 向 ssh-agent 询问身份时,ssh 可能会收到多个身份,并且会尝试使用所有身份。

那么你怎么知道代理有哪些身份呢? 奇怪的是,列出所有身份的命令是

ssh-add -L。

运行这个命令,可以看到我们所有的密钥,确认我们刚刚新增的密钥已经在ssh-agent管理的身份列表中。
现在我们知道 ssh-agent 将提供多个密钥。

ssh 如何使用这些密钥/身份? 这一次,让我们看一下
man ssh_config

除非设置了 IdentitiesOnly,否则身份验证代理表示的任何身份都将用于身份验证。

这实际上是说,ssh 会贪婪地尝试它提供的每个身份,除非你有使用 IdentitiesOnly 设置,比如:

ssh -o 'IdentitiesOnly yes' -i keypair.pem ec2-user@some-amazon-host

生成配置文件

生成配置文件用于根据情况选择不同的 ssh key。

touch ~/.ssh/config
vi config
  • 1
  • 2

写入内容

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

#Work GitHub
Host github.com-work
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_work
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

两个配置不同的地方在于 Host 和 IdentityFile,第二处 Host 填写的 github.com-work 是为了区分默认配置。

清除credential.helper设置

 git config --global --unset credential.helper
 git config --system --unset credential.helper
 git config --local --unset credential.helper
  • 1
  • 2
  • 3

测试SSH连接

使用以下命令测试SSH连接。
ssh -T -v github.com-work

确认得到如下响应:

Hi Your-name! You've successfully authenticated, but GitHub does not provide shell access.

配置本地仓库

对于本地已存在的仓库,查看remote。
git remote -v

添加/更改remote,不能使用HTTPS形式的remote,必须使用如下SSH形式。

git remote add origin git@github.com-work:username/reponame.git

如果已经存在remote,使用set-url 更改origin
git remote set-url origin git@github.com-work:username/reponame.git

git 就会依据 Hostname 选择需要的账户进行 push 和 pull 了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/390718
推荐阅读
相关标签
  

闽ICP备14008679号