引言
事情的经过是这样的:电脑之前便已经给自己的github账号配置好了ssh密钥,但是由于不可控原因,需要使用他人的github账号来开发一段时间,本来克隆代码是可以选择https和ssh两种方式的,但是建议是使用ssh的方式来拉代码,总之,就遇到了要在自己电脑上给多个 github 账户配置ssh的问题
过程
在实现多 github 账户配置SSH的需求时,我先去回顾了一下如何在github上添加SSH key,然后再去解决当在多个 github 账户上添加了SSH key后,然后再思考如何实现将GitHub账号的域名与密钥匹配
github 上添加 SSH key
创建一个 SSH key
bash
ssh-keygen -t rsa -C "your_email@example.com"
默认生成的ssh密钥路径~/.ssh/id_rsa
继续创建 SSH key
bash
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_other
-f命令为可选,若不写,在执行代码后也会让输入文件名
检查 SSH key
bash
cd ~/.ssh
ls
在 github 上添加 SSH key
- 首先,
cat ~/.ssh/id_rsa.pub打印出公钥信息,然后进行复制 - 然后登录github账号,进入设置页
- 最后点击菜单栏的
SSH and GPG keys进入页面添加SSH key,标题名随意取,Key的内容就是复制的公钥
SSH config 配置
打开SSH 配置文件 (~/.ssh/config) 并为每个GitHub 账号添加配置
bash
# 配置模板
Host 域名别名
HostName 域名
User git
IdentityFile ~/.ssh/github_account1
GitHub 域名
GitHub 仓库的域名通常是github.com,但在某些情况下,特别是对于组织(Organizations)或GitHub Pages网站,可以自定义域名
多 github 账号 config 配置
- 域名不同
javascript
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host xxx.com
HostName xxx.com
User git
IdentityFile ~/.ssh/id_rsa_xxx
- 域名相同,都为
github.com
javascript
Host github.com-account1
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_account1
Host github.com-account2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_account2
相同域名时,别名和域名会不一样。当要克隆或访问GitHub 仓库时,应使用配置的别名作为主机名,而不是默认的 github.com
bash
# github.com-account1、github.com-account2 替换 github.com
git clone git@github.com-account1:username/repo1.git
git clone git@github.com-account2:username/repo2.git
测试 SSH key
bash
ssh -T git@域名
SSH连接成功会返回截图内容: 
拓展
HTTPS 和 SSH 克隆的区别
GitHub支持两种主要的协议来克隆和与远程仓库交互:HTTPS和SSH。可以根据自己的偏好和需求选择使用HTTPS还是SSH与GitHub 仓库交互。大多数情况下,HTTPS足够用了
使用SSH的优势:
- 更安全,因为使用密钥对进行身份验证
- 验证更方便,一旦配置好
SSH 密钥对,就无需每次都输入密码
Permission denied (publickey)
确认密钥是否都已经添加到SSH 代理,使用以下命令列出代理中的密钥:
bash
ssh-add -l
如果密钥不在列表中,使用ssh-add命令将其添加到代理:
bash
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/is_rsa_xxx
Host key verification failed
在使用ssh -T git@域名测试SSH连接时一直会提示:Host key verification failed,看了保错提示是由于连接的host不在已知主机列表(~/.ssh/known_hosts)中,因此需要手动的在known_hosts文件里面加一下
bash
ssh-keyscan host >> ~/.ssh/known_hosts
运行上面的命令后再执行ssh -T git@域名测试连接就不会报错了~
结论
多个 github 账户配置SSH的情况虽然之前没有遇到,但是既然遇到了还是得好好记录一下,这次的问题是不同 github 账号不同域名配置 SSH ,要是下次又遇到不同 github 账号相同域名配置 SSH 呢?刚好一次性总结记录一下,一劳永逸~~