配置多个git账号的ssh密钥
博客改版,请直接访问新版文章:https://www.cnblogs.com/xiaoxi666/p/9975981.html
背景
我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。出于各种原因,自己的 github 项目无法使用公司的 git 账号,于是我们可以为自己的 github 创建一个新的 git 账号,这就需要生成新的 ssh 密钥。
下面总结了创建多个互相独立的 ssh 密钥的步骤(以公司的和自己 github 的为例)。
步骤(以 mac 为例)
在文件夹
~/.ssh/
下创建两个文件夹,分别为company/
和github/
,前者存放公司的 ssh密钥,后者存自己 github 的 ssh 密钥。下面的步骤以创建 github 密钥为例:在终端执行命令:
ssh-keygen -t rsa -C "your_github_email@example.com"
然后会提示
Enter file in which to save the key
,输入文件路径~/.ssh/github/id_rsa_github
,最后就会在该路径下生成id_rsa_github
和id_rsa_github.pub
两个文件(若直接回车的话,会保存在~/.ssh/
文件夹中)。然后出现
Enter passphrase (empty for no passphrase)
,直接回车即可。最后会出现创建成功的提示:
Your identification has been saved in .ssh_github/id_rsa_github.
Your public key has been saved in .ssh_github/id_rsa_github.pub.
文件
id_rsa_github.pub
中保存的就是 ssh 公钥。可以利用命令pbcopy
将其复制到剪贴板,比如我的命令就是pbcopy < ~/.ssh/github/id_rsa_github.pub
。当然你也可以找到该文件手动复制。在 github 网站中添加该 ssh 公钥。
创建公司 ssh 密钥 的过程类似,不再赘述。
两个 ssh 密钥创建完毕后,在
~/.ssh/
文件夹中创建文件config
,添加如下内容:# The git info for company
Host git.XXX.com # git别名,写公司的git名字即可
HostName git.XXX.com # git名字,同样写公司的git名字
User git # 写 git 即可
IdentityFile ~/.ssh/company/id_rsa #私钥路径,若写错会连接失败 # The git info for github
Host github.com # git别名,写github的git名字即可
HostName github.com # git名字,同样写github的git名字
User git # 写 git 即可
IdentityFile ~/.ssh/github/id_rsa_github #私钥路径,若写错会连接失败
注:配置文件中各参数含义请参见扩展部分
网上很多文章说要执行命令
ssh-add
将 IdentityFile 添加到 ssh-agent中,具体到本文中就是执行ssh-add ~/.ssh/company/id_rsa
和ssh-add ~/.ssh/github/id_rsa_github
。其实这个操作只是把专用密钥添加到 ssh-agent 的高速缓存中,因此略过该步骤也不会有影响。这一步用于验证是否配置成功,以 github 为例,输入
ssh -T git@github.com
,若出现Hi xiaoxi666! You've successfully authenticated, but GitHub does not provide shell access.
这样的字段,即说明配置成功。公司的同理。
总结
本文描述了单机配置两个 git 平台ssh密钥的方法,多个账号同理。推荐在 ~/.ssh/
文件夹下为不同的平台建立不同的文件夹,方便管理。根据上述配置,我的 ~/.ssh/
文件夹下是这样子的:
├── company
│ ├── id_rsa
│ └── id_rsa.pub
├── config
├── github
│ ├── id_rsa_github
│ └── id_rsa_github.pub
扩展
关于配置文件 config
配置文件的位置:上面我们在
~/.ssh/
文件夹下创建配置文件,其实也可以指定位置,具体可查阅 ssh帮助手册(man 1 ssh
)。-F configfile
Specifies an alternative per-user configuration file. If a configuration file is given on the command line, the system-wide configuration file (/etc/ssh/ssh_config) will be ignored. The default for the per-user configuration file is ~/.ssh/config.
Host 别名:可以随意指定,比如你把 github 的 Host 别名设置为 banana,那你在测试的时候也可以输入
ssh -T banana
,以后 clone 项目时也可以用 banana 代替 github.com 。User: 注意它和 git 中的 user.name 不是一个概念。
配置文件中的 User 是登录提供 git 服务的平台(如这里的 github)的服务器主机时指定的用户名,比如 github 中 clone 项目时选择 ssh,链接均以
git@github.com
开头,@ 前面的 git 就是 github 对应服务器主机中的一个用户名,即上面设置的 User,@ 后面的 github.com 就是 HostName);git 中的 user.name 是用来追踪代码的,提交代码时显示的作者名字就是它,比如在 github 中,我的 user.name 就是 xiaoxi666。这里引出了另外一个问题:我在本机中配置了多个 git 账号,如何在不同的项目中自动切换不同的作者名字?比如我在公司的代码库里提交代码时,用的就是另外一个名字而非 xiaoxi666。这部分内容涉及到了 git 的配置(可以在终端输入
git config --help
查看官方说明),你一定有过下面这种配置的经历:git config --global user.name "user_name"
git config --global user.email "user_name@example.com"
实际上,git 有三种配置选项,分别对应于 --system 、--global、--local,上面就是 --global选项。三种配置选项分别对应于三个配置文件:
--system -> /usr/local/git/etc/gitconfig
--global -> ~/.gitconfig
--local -> 你的项目仓库路径/.git/config
这三种配置文件的优先级由低到高为:--system、--global、--local,优先级高的配置会覆盖优先级低的配置。一般情况下,我们不会去设置 --system 选项,主要用的是 --global 和 --local。正如网上满天飞的教程中,我们一般会设置 --global,这样就不用在每个项目中设置一遍了;但是如果配置了多个 git 账号,需要在一些项目中使用不同的作者名字,就需要单独为该项目设置 --local。需要注意的是, --local 选项只能 cd 到当前项目路径下中执行,否则会报错 fatal: --local can only be used inside a git repository。
注一:如果 --system、--global、--local 都没有设置 user.email,将无法提交代码,因为无法识别代码作者。在设置了 user.email 的前提下,如果 --system、--global、--local 都没有设置 user.name,则会使用计算机登录用户名作为代码提交的作者名字。
注二:设置 --local 时记得同时设置 user.name 和 user.email,如果只设置 user.name,提交名字虽然正确了,但 user.email 还是用的 --global 中的 user.email,这会导致 github 仓库中显示的提交者却不会链接到你的账号:头像是灰色的八爪鱼,名字也没有链接。
配置文件可指定的参数还有很多,如端口等,这里我们直接使用默认端口 22,因此没有再去指定。
其他
pbcopy
和pbpaste
是两个非常好用的命令,可查阅相关资料了解。- 文章 http://man.linuxde.net/ssh-add 描述了 linux 的 ssh-add 命令,讲得不错。
- mac 分别有用户名、主机名(HostName),以及计算机名。其中计算机名可以在 "System Preference" -> "sharing" 中设置,是分享时展示的名字;我们打开终端时,会以
用户名@主机名 当前路径 $
或主机名:当前路径 用户名$
的格式显示,其中主机名可以用命令scutil –-set HostName new_hostname
设置。 - 有时我们需要添加或改变远程仓库的地址,添加命令为:
git remote add origin 项目地址
,改变命令为git remote set-url origin 项目地址
。其中项目地址的格式为 ssh 或 https。可以参见文章加以了解。
配置多个git账号的ssh密钥的更多相关文章
- 配置多个 git 账号的 ssh密钥
背景 在工作中,我们通常会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目.因此,我们需要为自己的 github 创建一个新的 git 账号,这就需要生成新的 ...
- 多个git账号的SSH配置
一般使用git都只需要维持一个默认的git账户就可以打天下了. 但如果自己确实需要多个git账号的需求的话,就有必要配置多个ssh key了. 首先为生成多个ssh key ssh-keygen -t ...
- 初次使用git配置以及git如何使用ssh密钥(将ssh密钥添加到github)
初次安装git配置用户名和邮箱 初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git con ...
- 在Windows下配置多个git账号
1.生成并部署SSH key 安装好Git客户端后,打开git bash,输入以下命令生成user1的SSH Key: ssh-keygen -t rsa -C "user1@email.c ...
- git如何设置ssh密钥
git设置ssh密钥 目前git支持https和git两种传输协议,github分享链接时会有两种协议可选: 1.Clone with SSH 2.Clone with HTTPS git在使用htt ...
- Git账号Window10系统配置密钥
Git 拉取 推送 报错 . Window10系统 需要配置Git账号密钥.
- Windows下配置多个Git账号
1. 为什么会用多个git账号? 不同git账号对应不同代码托管平台,如:github.bitbucket.gitlab.gitee(码云)等 2个GitHub账号,用于测试(最近需求,之前没研究过g ...
- 配置多个git用的ssh key
参考 http://www.sail.name/2018/12/16/ssh-config-of-mac/ 有一点注意 Host 的名字和 HostName改为一致. 因为从git仓库复制的地址是全程 ...
- 多个git账号之间的切换
在这篇文章中: 介绍 处理 一些题外话 我有一个repo,想要同时push到不同的仓库该如何设置? 我有一个github的repo,clone没有问题,push的时候总是报错:error: The r ...
随机推荐
- SpringAop注解实现日志的存储
一.介绍 1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封 ...
- [tkinter]隐藏/销毁控件
pack布局的情况下有pack_forget()方法让控件“不再显示”但控件还存在可以再次pack出来 from tkinter import * root = Tk() l1 = Label(roo ...
- Java提高篇(一):区分引用变量与对象
我们有代码: New A=new New(); 下面是这个New的类: class New { public New() { System.out.println("这是New类当中的构造方 ...
- request,reponse对象中的方法
1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例. 序号 方 法 说 明 1 obj ...
- 【RL-TCPnet网络教程】第6章 RL-TCPnet底层驱动说明
第6章 RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现. 6.1 初学者重要提示 6.2 KEI ...
- [Swift]LeetCode363. 矩形区域不超过 K 的最大数值和 | Max Sum of Rectangle No Larger Than K
Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix s ...
- [Swift]LeetCode414. 第三大的数 | Third Maximum Number
Given a non-empty array of integers, return the third maximum number in this array. If it does not e ...
- 起底区块链人脸识别黑马,一个没有人像的人脸识别:iFace Chain(爱妃链)
近几年来,人脸识别技术可谓在移动互联网中得到了空前广泛应用,从银行APP免密转账,人脸快捷支付到证券人脸开户,人脸识别技术已经应用到了移动互联的诸多应用场景.互联网无处不在的今天,便捷与安全貌似是一个 ...
- mongo 根据对象中的某个条件来查询
假如A表有如下数据 { "id" : 1, "users_info" : [{"uid" : 10001}, {"uid" ...
- Xapian的内存索引-添加文档
本文主要记录Xapian的内存索引在添加文档过程中,做了哪些事情. 内容主要为函数执行过程中的流水线. demo代码: Xapian::WritableDatabase db = Xapian::In ...