最近多个项目需要为不同的git配置不同的ssh key。
以添加多个github的ssh key为例。
创建多个ssh key
创建一个ssh key
$ ssh-keygen -t rsa -C "1email@github.com” -f ~/.ssh/id_rsa_personal
复制代码
创建第二个ssh key,命令相同,但有一点不同
$ ssh-keygen -t rsa -C "2email@github.com” -f ~/.ssh/id_rsa_company
复制代码
添加公钥
添加私钥
ssh-add ~/.ssh/id_rsa_company
ssh-add ~/.ssh/id_rsa_personal
复制代码
如果执行ssh-add时提示Could not open a connection to your authentication agent
,就先执行
$ ssh-agent bash
复制代码
然后再重新运行ssh-add命令。
成功后如下图所示:
查看私钥列表
$ ssh-add -l
复制代码
清空私钥列表
$ ssh-add -D
复制代码
添加key到github
登录github或你的代码托管平台。右上角你的账号登录个人信息处,点击settings
点击SSH-keys
点击 Add Key
,完成添加
创建并修改config文件
在windows下新建一个txt文本,然后改名为config
,注意没有后缀
内容如下:
company github
Host company.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
User gitpersonal github
Host personal.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal
User git
配置文件说明
Host : 自定义名称,任意字符串,可以看作识别码
HostName : 要登录主机的主机名,一定要是有效的,比如github.com
User : 只填git就成
IdentityFile : ssh key文件路径
Port: 端口号(如果不是默认22号端口则需要指定)
如果我要clone 个人代码库,就执行
git clone git@personal.github.com:USERNAME/PROJECT.git
复制代码
git库会被如此翻译
git@${Host}:USERNAME/PROJECT.git # ${Host}会被替换为HostName
复制代码
例如https://github.com/Kitware/CMake.git
测试
$ ssh -T git@github.com
PS:如果到这里你没有成功的话,别急,教你解决问题的终极办法–debug
比如测试github,ssh -vT git@github.com
-v
是输出编译信息,然后根据编译信息自己去解决问题吧。就我自己来说一般是config里的host那块写错了
补充一下
如果之前有设置全局用户名和邮箱的话,需要unset一下
git config --global--unsetuser.name
git config --global--unsetuser.email
复制代码
然后在不同的仓库下设置局部的用户名和邮箱
比如在公司的repository下
git config user.name "yourname"
git config user.email "youremail"
复制代码
在自己的github的仓库在执行刚刚的命令一遍即可。
这样就可以在不同的仓库,已不同的账号登录。