mac下配置两个ssh提交到两个github账户,包含不生效分析

1. 预置条件和期望:

mac环境,公司电脑上配置了公司账户需要的ssh,这个时候如果有自己的一些总结想push到自己的github账户上,因为现在github已经停止https方式push代码,这个时候就需要配置两个ssh来分别到两个github账户上。

准备工作:

  1. 两个ssh key
  2. 两个github账户

cd到~/.ssh目录下使用以下命令生成两个key,自行调整参数和名字。

# 这里默认rsa生成最基本的秘钥,需要其他加密类型的自行调整
ssh-keygen -t rsa -C "abc@163.com" -f ~/.ssh/id_rsa_a
ssh-keygen -t rsa -C "xyz@163.com" -f ~/.ssh/id_rsa_b

2. 具体配置:

好,那我们现在在~/.ssh目录下有了两个ssh key,四个文件

id_rsa_a
id_rsa_a.pub
id_rsa_b
id_rsa_b.pub
2.1 config文件

SSH config是Linux系统下针对SSH客户端的一个参数配置方案,可以将一些关于SSH命令的参数放到配置文件中去,执行ssh命令的时候从文件中读取,简化命令行的操作。

ssh的config配置也有一定的优先级,由高到低按照以下的顺序获取(这里有个坑,后面会说到):

例子
命令行选项 -p 10086-i /path/to/identity_file 等选项来设置SSH的端口号或认证证书位置
用户配置文件 ~/.ssh/config,默认不存在,需要手动创建
系统级配置文件 /etc/ssh/ssh_config,针对所有user的配置文件,一般用不到

按照我们的期望,config配置如下:

#~/.ssh/config
Host github_a
       HostName github.com
       User git
       IdentityFile ~/.ssh/id_rsa_a

Host github_b
       HostName github.com
       User git
       IdentityFile ~/.ssh/id_rsa_b

我们先贴一条clone命令:git clone git@github.com:yocn/resp.git
我们来拆解一下这个命令
用户名@主机地址:id/仓库名

  • Host
    也可称为Alies,一个别名,通过它可以找到以下的配置
  • HostName
    需要ssh连接过去的主机地址,在我们现在的需求里面就是github.com,也可以是IP地址,在ssh连接linux server的时候一般是ip地址
  • User
    登录主机的用户名,在我们现在的需求里面是git,如果是ssh连接server的时候就是你需要ssh登录的用户名
  • IdentityFile
    秘钥的位置

所以配置完之后,我们就可以把之前的clone命令用下面的代替:
git clone git@github.com:yocn/resp.git

git clone github_a:yocn/resp.git

2.2 添加到ssh-agent

ssh agent,意为 ssh 代理,是一个密钥管理器,用来管理一个多个密钥,并为其他需要使用 ssh key 的程序提供代理。
当其他程序需要身份验证的时候 可以将验证申请交给 ssh-agent 来完成整个认证过程 。使用不同的密钥连接到不同的主机时,需要要手动指定对应的密钥,而 ssh 代理可以 自动帮助我们选择对应的密钥进行认证。
需要把上面的两个key添加到ssh-agent,可以用下面的命令,添加到环境变量配置文件里,每次运行自动添加,就不用手动添加了。

# .bash_profile
nohup ssh-add ~/.ssh/id_rsa_a >/dev/null 2>&1
nohup ssh-add ~/.ssh/id_rsa_b >/dev/null 2>&1

还有一种方式可以自动添加到ssh-agent中,ssh-agent启动的时候就自动加载进去了

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_a

但是这种方法我没法加载多个key,只能配置一个IdentityFile,每次可以使用ssh-add -l查询已经添加到ssh-agent中的key,可以看到上面两个key都添加进去了。

abc@abc ~ % ssh-add -l
3072 SHA256:LAgtT7X/bFLtc8fyxxxxxxxxWkSKP+UqVi/5YUpExBs abc@163.com (RSA)
4056 SHA256:4vZ5H41eFKXn/KLxxxxxxxx+3zR7MD3e46ytVobsXsM4 xyz@163.com (RSA)

这个时候我们已经可以测试我们的连通性了:

abc@abc resp % ssh -T github_a                           
Hi yocn! You've successfully authenticated, but GitHub does not provide shell access.

不出意外的话是这样的打印结果,如果有问题请移步5. 不生效的异常检查:查看并一步步排除。

3. 拉取,提交代码

我们遇到的一般情况是公司的环境已经配好了,我们要做的就是使自己的环境work但不影响公司环境的运行。

这个时候我个人的github仓库为
git clone git@github.com:yocn/resp.git
我们需要用我们替换过的仓库地址来拉取仓库:
git clone github_a:yocn/resp.git

拉取下来之后我们可以使用git remote -v命令查看仓库的远端地址。

abc@abc resp % git remote -v
origin  git@github_a:yocn/resp.git (fetch)
origin  git@github_a:yocn/resp.git (push)

这个时候尝试用git push测试,一般没问题了。

4. one more thing

我这个搞了半天没有成功是因为之前的时候在ssh的global配置中配了core.sshCommand='ssh -i ~/.ssh/id_rsa',当时用这个命令配置了一个秘钥进去,后来忘记了。

如果设置了core.sshCommandgit fetchgit push在需要连接到远程系统时将使用指定的命令而不是 ssh。该命令与GIT_SSH_COMMAND环境变量的形式相同,并在设置环境变量时被覆盖。
也就是每次执行ssh的时候会执行ssh -i ~/.ssh/id_rsa,所以导致失败。

5. 不生效的异常检查:

  1. 检查git工程的config(工程目录下使用git config --list)或者git remote -v查看工程的push和origin地址是否是我们配置的地址
  2. ssh-add -l查看我们期望的ssh 私钥是否添加到ssh-agent
  3. 查看期望的公钥是否在github中配置,比对第2步中的私钥列表,是否添加到ssh-agent
  4. 检查自己的git全局配置(git config --global --list),在git config core.sshcommand中是否有什么额外配置导致异常

总结:

需要配置两个ssh key在两个github账户登录的时候,需要以下几步:

  1. ~/.ssh/config中配置不同的私钥
  2. 两个私钥都需要用ssh-add命令添加到ssh-agent
  3. clone仓库的时候需要用config中配置的Host名字替换
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容