github 账户 - yuhannah/use_github GitHub Wiki

github 账户与 ssh-key 配置

单账户

C:/Users/xxx/.ssh/目录下,打开 git bash,用 github 账户的邮箱生成 ssh-key:

ssh-keygen -t rsa -C "[email protected]"

默认情况下,密钥名称为 id_rsa 和 id_rsa.pub。保存路径为C:/Users/xxx/.ssh/。回车即可。 默认情况下,密码为空。回车即可。 创建密钥成功后,在上述路径下可以看到生成的两个文件。 在电脑-服务中,打开 OpenSSH Authentication Agent 为启动状态。为了让 SSH 识别新的私钥,需将其添加到 SSH agent中:

ssh-agent bash # Could not open a connection to your authentication agent
ssh-add ~/.ssh/id_rsa

用记事本打开公钥 id_rsa.pub ,将内容复制,在 github 账户的 setting/SSH 标签下,创建新的 ssh ,将拷贝的内容复制进去即可。 测试 ssh 连接:

ssh -T [email protected]
Hi userone! You've successfully authenticated, but GitHub does not provide shell access.

在同一台电脑的 git 上使用多个账户

多账户又分为多个 github 账户,或者多个其他类型的账户。操作方式是一样的。 创建新的账户的密钥时,修改默认名称,如:id_rsa.usertwo,路径默认。那么在上述路径下产生一对新的密钥。 将新的密钥添加到 SSH agent 中:

ssh-agent bash # Could not open a connection to your authentication agent
ssh-add ~/.ssh/id_rsa.usertwo

将新的密钥添加到新的 github 对应的账户中。 接下来是重点。在路径中添加 config 文件,用于区分不同的账户配置,内容如下:

# userone([email protected]) 
Host userone.github.com # 将 [email protected] 替换成 [email protected],自定义
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa.userone # 用户1的密钥路径 
    User userone # 用户1的名称

# usertwo([email protected]) 
Host usertwo.github.com # 将 [email protected] 替换成 [email protected],自定义
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa.usertwo # 用户2的密钥路径 
    User usertwo # 用户2的名称

其规则就是:从上至下读取 config 的内容,在每个 Host 下寻找对应的私钥。 测试 ssh 连接:

ssh -T [email protected]
Hi userone! You've successfully authenticated, but GitHub does not provide shell access.
ssh -T [email protected]
Hi usertwo! You've successfully authenticated, but GitHub does not provide shell access.

在此过程中,出现下述问题,检查 config 文件的内容是否符合规则,以及别名的使用是否对应配置。

ssh -T userone.github.com # 网上有的直接用别名就能连接成功,我试了不行
[email protected]: Permission denied (publickey).

在拉仓库时,换成如下命令:

git clone [email protected]:userone/xxxxx.git # 旧命令
git clone [email protected]:userone/xxxxx.git # 新命令

最后,在 git 的工作目录中,设置本地的用户名和邮箱

git config --local user.name "github用户名"
git config --local user.email "注册邮箱"

如果不设置用户名,则能正常提交,但提交的用户名会是global设置的用户名。