同一台电脑的同一个ssh共钥无法配置到多个github账号。例如公司的电脑ssh公钥配置到公司的github账号后,无法在使用同一个公钥配置个人的github账号。这时候需要生成多个ssh密钥,分别配置给不同的github账户
目前所有命令操作是在 win下的 git_bash 中操作的
生成新的ssh key
$ cd ~/.ssh/
lin@DESKTOP-8IV0LG9 MINGW64 ~/.ssh
$ ssh-keygen -t rsa -f "company"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in company.
Your public key has been saved in company.pub.
The key fingerprint is:
SHA256:gxVP4oU3XzI1clhKC4L/154QRGSsf6+vqvSW2g7qYyc lin@DESKTOP-8IV0LG9
The key's randomart image is:
+---[RSA 2048]----+
| .+.++*+= |
| ...Bo+*=.. |
| .o..=o+ |
| o. . o |
| . S. . o |
| .. + o |
| o. = o |
| Eo.+o o .|
| oo+o==.o+.|
+----[SHA256]-----+
执行命令 ssh-keygen -t rsa -C xxxx 后,会有一个输入密码(Enter passphrase (empty for no passphrase)) 与再次确认密码(Enter same passphrase again)的动作,这个时候如果你输入了密码,以后每次git操作都必须输入密码,推荐直接回车。踩坑人的文章地址:解决使用git,ssh每次都要输入密码
-f
给新生成的密钥自定义命名,否则生成的是默认密钥:id_rsa与id_rsa.pub 它会覆盖掉现有的默认密钥,执行完成后,会在 ~/.ssh/目录下生成一个 company
和 company.pub
文件
复制新的公钥到github账号
使用 cat company.pub
,查看并复制显示的内容。
-
右上角下拉面板选择 Settings;
-
左侧选择 SSH and GPG keys,点击 New SSH key;
-
起一个 title,Key type 不用改,默认Authentication Key就行;
-
把公钥粘贴到 Key 选项下面。
配置~/.ssh/config 文件
vim ~/.ssh/config
,写入如下内容
# key1 公司的github账号
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# key2 个人的guthub账号, lpb.github.com. me是自定义的
Host lpb.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/company
Bad owner or permissions on ~/.ssh/config,主要是没有对config的权限,运行命令: sudo chmod 600 config
测试ssh到github服务器的连接
lin@DESKTOP-8IV0LG9 MINGW64 ~/.ssh
$ ssh -T git@lpb.github.com
Hi linPB! You've successfully authenticated, but GitHub does not provide shell access.
lin@DESKTOP-8IV0LG9 MINGW64 ~/.ssh
$ ssh -T git@github.com
Permission denied (publickey).
如果出现Hi USERNAME! You’ve successfully authenticated, but github does not provide shell access.
提示,说明我们的配置成功,到此就可以结束了。否则出现Permission denied (publickey)
提示,说明系统ssh代理出现问题。
出现以上原因主要是因为:
github使用SSH与客户端连接。如果是单用户(first),生成密钥对后,将公钥保存至 GitHub ,每次连接时SSH客户端发送本地私钥(默认~/.ssh/id_rsa)到服务端验证。单用户情况下,连接的服务器上保存的公钥和发送的私钥自然是配对的。但是如果是 多用户 (first,second),我们在连接到second的帐号时,second保存的是自己的公钥,但是SSH客户端依然发送默认私钥,即first的私钥,那么这个验证自然无法通过。
配置ssh key代理
- 查看系统ssh-key代理,执行如下命令:
ssh-add -l
如果提示Could not open a connection to your authentication agent.
,那么先执行下ssh-agent bash
。
以上命令如果输出The agent has no identities.
则表示没有代理。如果系统有代理,可以执行下面的命令清除代理:ssh-add -D
- 然后依次将不同的ssh添加代理,执行命令如下:
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/company
- 再次进行ssh测试即可.
注意事项:ssh测试之后,在连接非默认账号的github仓库时,远程的地址要对应的作出修改.
配置了lpb.github.com用作个人的git我们就不能在用git@github了,要是用git@lpb.github.com
如果是配置git ssh密钥前已经拉过的代码,需要修改远程URL
远程URL如果是 https 的,直接改成 用 ssh 的,注意上面的提示,不用 git@github 这个,用自定义的 git@lpb.github.com 这个,如果是 ssh 的,但是是 git@github 的,也要重新改下,改成 自定义的。
查看 remote :git remote -v
修改 remote :git remote set-url origin git@lpb.github.com:[用户名]/[仓库名].git
网友评论