git ssh-key 及多帐户设置
在使用git的时候,我们在管理远程分支之前需要在本机上创建ssh-key密钥对,并把其中的公钥添加到github中。
首个帐户
如果你只会在你的计算机使用一个远程的Git服务器,并且账号是一个,比较简单,生成key的时候也没有太大注意的地方,直接运行如下的第一步然后按回车就可以了
- 在 gitbash上运行
ssh-keygen -t rsa -C "Github账户邮箱"
- 接下来会提示输入key的名字 默认名字为
id_rsa
,默认不改直接回车就行了 - 然后会提示输入口令,这里口令与Github中的密码无关,随便输入可以为空,为空直接回车。
如果在第二步中的没有重新命名的话,则忽略此步骤,
ssh agent
默认只读取id_rsa
,为了让SSH识别新的私钥,需将其添加到SSH agent中,如第二步改的名字为robin
, 则执行:ssh-add id_rsa
如果出现Could not open a connection to your authentication agent
的错误,就试着先用以下命令:ssh-agent bash ssh-add robin
添加完之后 登陆Github,点击网页右上侧的 Settings 按钮 - 选择 ssh-keys 点击Add SSH Key ,在title中输入名字,然后将公钥即id_rsa.pub添加到ssh-key处。
执行
ssh -T git@github.com
如果能正常访问即可$ ssh -T git@github.com Hi robin! You've successfully authenticated, but GitHub does not provide shell access.
第二个帐户
新建user2的SSH Key
$ cd ~/.ssh #切换到C:\Users\Administrator\.ssh ssh-keygen -t rsa -C "user2的Github账户邮箱" //新建工作的SSH key Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): user2 //设置名称为user2(后文的user2可以统一替换任何别名)
新密钥添加到SSH agent中
因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:
ssh-add ~/.ssh/user2 //注意路径,如果不在.ssh目录下则不能省略 '~/.ssh/'
同样,如果出现
Could not open a connection to your authentication agent
的错误,就试着用以下命令:ssh-agent bash ssh-add ~/.ssh/user2
添加user2的公钥
打开新生成的
~/.ssh/uesr2.pub
文件,将里面的内容添加到user2的github帐号下的SSH Key中。修改config文件 (重要的一步)
将账户以及git服务器与对应的密钥关联。在~/.ssh目录下找到config文件,如果没有就创建:
touch config
然后修改如下: 我的config配置如下:
# 该文件用于配置私钥对应的服务器 # Default github user1 Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa # second user2 # 建一个github别名,新建的帐号使用这个别名做克隆和更新 Host user2 HostName github.com User git IdentityFile ~/.ssh/user2
帐号关联
如果你只是文章中所述配置了Host,那么你多个账号下面的提交用户会是一个人,所以需要通过命令
git config --global --unset user.email
删除全局用户账户设置,当然也可以不删除,如果每个git项目下没有单独设置用户帐户信息的话,会默认使用全局设置
在每一个git项目下面使用命令
git config --local user.name '该项目的github用户名' git config --local user.email '该项目的github邮箱@mail.com'
单独设置用户账户信息,每个不同于全局用户帐户的git 项目都需要设置。
关于 clone
使用
git clone user2:user2/test.git
而不是
git clone git@github.com:user2/test.git
否则无法分辨使用的是哪一个帐户。
关于 remote
如果clone 项目时使用的是
git clone user2:user2/test.git
则remote url的Host 就是user2,可以跳过这一步,否则需要更改一下关联(包括git init新建),查看 remote
git remote -v
如果user2的项目`remote.origin.url=git@github.com:user2/test.git `则需要进行修改
git remote rm origin git remote add origin user2:user2/test.git
测试:
$ ssh -T git@github.com Hi user1! You've successfully authenticated, but GitHub does not provide shell access. $ ssh -T user2 Hi user2! You've successfully authenticated, but GitHub does not provide shell access.