GitHub多账号管理
1. 背景
在工作时,不管是使用gitlab还是公司自己基于git建立的代码托管系统,我们都会拥有一个使用公司邮箱注册一个github账号。但我们总归需要有自己的‘私人空间’,比如自己写一些demo,或者作为云盘等。此时就需要一台电脑管理 2个及以上的github账号。
**注:一定要关注公司的围墙红线,不要将公司相关资产上传至github等公共场所
**注:一定要关注公司的围墙红线,不要将公司相关资产上传至github等公共场所
**注:一定要关注公司的围墙红线,不要将公司相关资产上传至github等公共场所
2. 思路
ssh连接方式小使用到RSA技术,如果我们没有改动过ssh的默认目录,那么我们会在~/.ssh目录下看到两个秘钥和一个文件
id_rsa:私钥
id_rsa.pub:公钥
known_hosts:远程服务器ip及公钥,用于验证服务器公钥是否更改
此时好需要一个配置文件,git在解析的时候会读取配置文件,从而获取相应账号的秘钥,具体配置稍后说明。
具体步骤:
1)生成不同名称的秘钥
2)更改配置文件
3)取消全局用户名
3. 实操
ssh-keygen:生成、管理和转换认证密钥
常用的可选参数
-C comment
提供一个新注释,即备注-c 要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。
程序将提示输入私钥文件名、密语(如果存在)、新注释。-f filename
指定密钥文件名。-T output_file
测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性。-t type
指定要创建的密钥类型。可以使用:”rsa1”(SSH-1) “rsa”(SSH-2) “dsa”(SSH-2)
(1)在.ssh目录下生成自定义名称的秘钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "yourmail@xxx.com
复制公钥并添加到GitHub上你账户上,路径为 setting -> ssh and GPG keys
(2)在.ssh目录下生成配置文件
如果有config文件直接编辑,否则生成。
config文件配置说明:
Host : 标识一个配置区段。
GlobalKnownHostsFile:指定一个或多个全局认证主机缓存文件,用来缓存通过认证的远程主机的密钥,多个文件用空格分隔。默认缓存文件为:/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2.
HostName:指定远程主机名,可以直接使用数字IP地址。如果主机名中包含 ‘%h’ ,则实际使用时会被命令行中的主机名替换。
IdentityFile:指定密钥认证使用的私钥文件路径。默认为 ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 或 ~/.ssh/id_rsa 中的一个。文件名称可以使用以下转义符:’%d’ 本地用户目录
‘%u’ 本地用户名称
‘%l’ 本地主机名
‘%h’ 远程主机名
‘%r’ 远程用户名可以指定多个密钥文件,在连接的过程中会依次尝试这些密钥文件。
Port:指定远程主机端口号,默认为 22 。
User:指定登录用户名。
UserKnownHostsFile:指定一个或多个用户认证主机缓存文件,用来缓存通过认证的远程主机的密钥,多个文件用空格分隔。默认缓存文件为: ~/.ssh/known_hosts, ~/.ssh/known_hosts2.
1 | # default |
(3)测试
1 | # ssh -T git@host |
如果你遇到了如下的错误
1 | git@github.com: Permission denied (publickey). |
你可以尝试将新生成的秘钥需要加入到缓存:
1 | ssh-add -K ~/.ssh/id_rsa_xx |
到这里就可以克隆远端的仓库了。并且此时可以使用sourceTree进行配置,后面的操作可以跳过
(4)删除全局配置
1 | git config --global --unset 'user.name' |
在自己的仓库下重新配置
1 | git config user.name `xxx“ |
(5)推送到远端
重新设置远端
1 | # host 配置文件的host |
1 | git push origin master |
之后再添加远程仓库的时候,就不能直接使用http
的方式了,只能使用ssh
方式.