一、如何生成ssh密钥 1.1 设置Git的user.name和user.email 为了生成多账户,这里展示的局部的git配置,并不是全局的账户配置(全局配置:在config后面加上–list)。
1 2 3 4 5 6 7 //github账号 $ git config user.name "zhangsan" $ git config user.email "zhangsan@gmail.com" //gitlab账号 $ git config user.name "zhangsan" $ git config user.email "zhangsan@qq.com"
1.2 生成SSH密钥 1 2 3 4 5 //github账号 $ ssh-keygen -t rsa -C “zhangsan@gmail.com” //gitlab账号 $ ssh-keygen -t rsa -C “zhangsan@qq.com”
文件命名后,按2次回车,密码为空。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/zhangsan/.ssh/github_id_rsa. Your public key has been saved in /Users/zhangsan/.ssh/github_id_rsa.pub. The key fingerprint is: SHA256:mRAluu98izlMRIQhaezphUvRHnkEH5HFm+aAX6wtXBU zhangsan@gmail.com The key's randomart image is: +---[RSA 2048]----+ | ..ooBB*o E. | | =.=o++. . | | o =.=o. + | | = +.o.Bo | | o o.+ OS | | o .* o | | o.. | | ooo. | | =o.. | +----[SHA256]-----+
将上面ssh密钥生成步骤重复一次,最后得到四个文件:github_id_rsa、github_id_rsa.pub和gitlab_id_rsa、gitlab_id_rsa.pub
二、多账号配置 在~/.ssh目录下,增加config配置文件(注:无后缀名),配置规范如下(可配置多个git账号):
1 2 3 4 5 #Host host(Host简称,使用命令ssh host可连接远程服务器,如:ssh github) #User/Email 登录用户名(如:zhangsan/zhangsan@gmail.com) #HostName 主机名用ip或域名,建议使用域名(如:github.com) #Port 服务器open-ssh端口(默认:22,默认时一般不写此行 #IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
接下来,举个具体的栗子:
1 2 3 4 5 6 7 8 9 10 11 #github zhangsan@gmail.com host github Hostname github.com User zhangsan IdentityFile ~/.ssh/github_id_rsa #gitlab zhangsan@qq.com host gitlab Hostname gitlab.*.com User zhangsan IdentityFile ~/.ssh/gitlab_id_rsa
注意事项:
在配置文件中的,IdentityFile文件位置是rsa私钥,不是.pub公钥
push代码的时候注意下,得check下本的user.name和user.email,若没有进行生成操作。建议最好设置一个全局的user.name和user.email,然后需要特定的配置的git仓库,就单独配置(当前配置查询命令:$ git config –list)
三、ssh-add增加新的私钥 1 2 3 4 5 //github账号 $ ssh-add ~/.ssh/github_id_rsa //gitlab账号 $ ssh-add ~/.ssh/gitlab_id_rsa
该命令如果报错:Could not open a connection to your authentication agent.无法连接到ssh agent,可执行ssh-agent bash命令后再执行ssh-add命令。
上面的配置完成完成,使用命令ssh-add -l可以看到所有的密钥列表,ssh-add的作用主要将密钥添加到 ssh-agent 的高速缓存中,这样在当前会话中就不需要再次输入密码了 具体的可以参考SSH Keys