生成新ssh key

如果我们电脑上已经存在了一个ssh key,那么我们需要在我们电脑上生成第二个你想在本电脑上使用的id_rsa,使用命令:ssh-keygen -t rsa -C "你的github账号"

红色标注部分会提示你把新生成的id_rsa存放到哪里,此处默认会存放在c盘的用户名下的.ssh文件夹下(即你第一个github用户ssh key存放的目录),因此我们需要输入路径/c/Users/DodoMonster/.ssh(注意此路径是你的系统盘下用户目录安放ssh密钥的目录,请使用自己电脑上相对应的目录),最后我以“id_rsa_gman”重新命名了ssh key防止默认与已有的ssh key重复。

在输入了路径后,会提示你输入提交项目时输入的验证密码,不输则表示不用密码,这是为了防止别人随便在你的项目上push东西,所以最好还是输入以下你的密码。回车,再重复输入确认回车即可(一路回车也可以,此时没有密码)。

添加新ssh key

默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent
使用命令:ssh-add ~/.ssh/id_rsa_gman

如果报错:Could not open a connection to your authentication agent.无法连接到ssh agent;可执行ssh-agent bash命令后再执行ssh-add命令

配置config文件

查看.ssh文件中是否存在config文件

如果已存在则直接编辑config文件,命令:vim config          #这是linux的命令,进入了vim界面后按a或i或A或I进入编辑模式,编辑完成后按esc键输入:wq 保存文件退出

如果不存在则需要创建config文件,命令:touch config,再对config文件进行编辑

对config文件进行配置填写:

        #Default github user(DodoMonster@email.com)-这其实是注释Host github  #把默认的常用的github Host设为github.com较好HostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_me其中Host 后的名字可以随意方便自己记忆,但HostName必须为github.com。# ************************************************#second user(monster@qq.com)Host monsterHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa
 ps:HostName 是域名   

测试是否配置成功

使用命令:

   ssh -T git@github.comssh -T git@github

出现如图的欢迎语则为配置成功。

注意:配置完成后,在连接Host不是github.com的github仓库时,远程库的地址要对应地做一些修改,比如现在添加monster帐号下的一个仓库orderTicket,则需要使用如下命令这样添加:

git remote add test git@github:monster/orderTicket.git

而并非原来的git@github.com:monster/orderTicket.git(这样每次连接都会使用id_rsa与服务器进行连接)。

配置至此,大功告成!

配置多个远程仓库

生成三个ssh-key

  • 生成三个名称不同ssh-key
    分别命名为id_rsa_github;id_rsa_github2;id_rsa_github;id_rsa_gitee
# 可以采用如下方式 在第一个回车后输入名称
ssh-keygen -t rsa -C "yourmail@gmail.com
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/QuQu/.ssh/id_rsa): id_rsa_gitlab

编辑config文件,配置不同的仓库指向不同的密钥文件

  • 如果没有则在~/.ssh文件夹下新建 config文件
  • windows 在Window进入C:/Users/你的用户名/.ssh文件夹,右键新建一个文本文件,改名为config即可。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。
  • Linux进入.ssh文件夹:cd ~/.ssh,新建config文件:touch config;或者:touch ~/.ssh/config。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。
  • 添加如下内容
# github配置
Host github.com(可更改)// 主机名字,不能重名HostName github.com// 主机所在域名或IPUser git// 用户名称PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_github// 私钥路径
# github配置(第二个与第一个不是一个仓库但是同为github)
Host github2.com(可更改)// 主机名字,不能重名HostName github.com// 主机所在域名或IPUser git// 用户名称PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_github2// 私钥路径# gitlab配置
Host gitlib.com(可更改)HostName gitlab.xxx.com(gitlab仓库域名)User  gitPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_github
# gitee配置
Host gitee.com(可更改)HostName gitee.comUser  gitPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_github

清空本地的 SSH 缓存,添加新的 SSH 密钥 到 SSH agent中

  • 这里如果你用的github官方的bash,ssh-agent -s,如果是其他的,比如msysgit,eval $(ssh-agent -s)
# 如果在.ssh目录下可省略文件路径 :ssh-add id_rsa_github
ssh-add -D
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlab

测试 ssh 链接

ssh -T git@github.com
ssh -T git@github2.com
ssh -T git@gitee.com
ssh -T git@gitlab.com
# xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
# 出现上述提示,连接成功

取消 git 全局用户名/邮箱的设置,设置独立的 用户名/邮箱

# 取消全局 用户名/邮箱 配置
$ git config --global --unset user.name
$ git config --global --unset user.email
# 进入项目文件夹,单独设置每个repo 用户名/邮箱
$ git config user.email "xxxx@xx.com"
$ git config user.name "xxxx"

命令行进入项目目录,重建 origin (whatever 为相应项目地址)

$ git remote rm origin
# 远程仓库地址,注意Host名称
$ git remote add origin git@second.github.com:githubUserName/repName.git
$ git remote -v # 查看远程# ssh -vT git@github.com可以打印log 通过此方法可以debug如果连接不成功

原理分析

  1. ssh 客户端是通过类似 git@github.com:githubUserName/repName.git 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的github.com。
  2. 如果所有账号的 User 和 Host 都为 git 和 github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名解析到 github.com,如上面配置中的Host gitlab.com。
  3. 配置了别名之后,新的地址就是user@host:repName/repName.git(在添加远程仓库时使用)。
    这样 ssh 在连接时就可以区别不同的账号了。

使用新的公私钥

  • 情景1:使用新的公私钥进行克隆操作
git clone git@gitlab.com:username/repo.git
注意此时要把原来的github.com配置成你定义的github
  • 情景2:已经克隆,之后才添加新的公私钥,我要为仓库设置使用新的公私钥进行push操作
修改仓库的配置文件:.git/config 为
[remote "origin"]url = git@gitlab.com:gitlabUserName/repName.git

GIT:如何管理本机的多个ssh密钥(多个远程仓库账号)相关推荐

  1. Git使用 从入门到入土 收藏吃灰系列(六) 链接远程仓库

    文章目录 一.前言 二.使用Gitee链接远程仓库(免密登录) 2.1链接仓库 2.2使用指令上传远程仓库 三.利用GitHub连接远程仓库(免密登录) 一.前言 参考安装Git 详细安装教程 参考视 ...

  2. 【Git】Git 标签使用 ( 创建并查询标签 | 推送单个标签到远程仓库 | 推送所有标签到远程仓库 | 删除远程仓库的标签 )

    文章目录 一.创建并查询标签 二.推送单个标签到远程仓库 三.推送所有标签到远程仓库 四.删除远程仓库的标签 一.创建并查询标签 执行 git log --pretty=oneline --abbre ...

  3. 如何利用git将本地项目上传到码市、github等远程仓库

    在码市或者github上创建新的远程仓库 给项目创建本地仓库 把文件添加到仓库 把文件放到仓库 把本地仓库与Coding远程仓库关联 把本地库的所有内容推送到Coding远程库上 代码合并 再次将本地 ...

  4. 使用Git命令行推送代码到远程仓库,阿里云效Codeup代码管理平台

    项目提交暂存.提交本地仓库.拉取.推送: [本步骤是新项目流程]请自行根据自有项目分辨是否需要跳过前两步. 右键点击项目根文件夹,选中Git Bash Here,打开命令行. (1)初始化项目命令: ...

  5. Git实战(四)| Git分支管理实操,解决在线合并和本地合并

    900×400 65.6 KB 类似于SVN这种集中式版本管理,三年前刚来上海工作时候,在华为驻场上班,华为用的就是SVN,印象最深的就是那个小乌龟的图标:后来到外面工作,渐渐发现用Git的非常多,慢 ...

  6. Git——代码管理工具

    摘要 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git 是 Linux 内核开发而开发的一个开放源码的版本控制软件.Git 与常用的版本控制工具 CVS, Subv ...

  7. 代码管理平台介绍、安装svn、客户端使用svn、远程仓库、分支管理、标签管理、git别名、搭建git服务、安装gitlab、简单使用gitlab、备份和恢复

    22.1 代码管理平台介绍 现在的开发工作都是由团队合作来完成开发,通常都是团队中的每个人或者每几个人完成一个模块的开发,最后再将模块拼凑起来,形成一个完整的项目,这就涉及到了协同开发.在各个模块的开 ...

  8. git分支管理规范和gitee上分支开发

    git分支管理规范 分支开发图示: 初始化仓库 git init 初始化master vim Readme.md git add . git commit -m "init" 创建 ...

  9. github ssh 配置_Github远程仓库克隆更新本机,SSH协议免密操作配置和注意事项

    Github远程仓库-克隆远程仓库到本机 [重点] 目标 如何克隆远程仓库到本机呢? 小结下载项目的命令: git clone https://gitee.com/kekesam/sassweb777 ...

最新文章

  1. Oracle 12c DG备库Alert报错ORA-01110
  2. 使用直方图处理进行颜色校正
  3. 想让论文能发表,应该星期几投稿?丨SCI研究
  4. KVM配置之(3)- 克隆
  5. 跨链(5)“蚂蚁区块链”之预言机
  6. mysql varchar 非空判断_工资从1万到3万,你还差mysql数据库优化之系列三
  7. apache服务器性能诊断,Apache服务器性能评测
  8. MySQL在EF Core下的Scaffolding操作
  9. L - Clock Master Gym - 102798L
  10. neon浮点运算_ARM 浮点运算详解
  11. python 获取进程池 sleeping_Python 进程操作之进程池--Pool
  12. 开源任务式问答机器人框架系列之Dialogflow
  13. 计算机桌面文件删除不掉是怎么了,电脑删除不了文件怎么办?教你几种好的处理方法,一学就会...
  14. 苹果自带的清理软件_系统自带垃圾清理软件屁用没有,但这款9.4评分的真心好用...
  15. 计算机专业html5的毕业论文范文,5000字计算机专业大专毕业论文参考范文
  16. Module not specified
  17. 2016一路有你,2017一起同行
  18. 关于混入(minxs)的使用
  19. Axure 元件属性
  20. 2021年中国乳制品产量、营业收入、利润总额及进出口分析[图]

热门文章

  1. 从几十人小药厂走出的惊天抗癌神药
  2. 关于表单的java的程序_JAVA BOT程序模拟人类用户填写表单 并 发送
  3. R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行SpatialSign变换(将数据投影到单位圆之内)、设置method参数为spatialSign
  4. Python使用matplotlib可视化箱图、seaborn中的boxplot函数可视化分组箱图、在箱图中添加抖动数据点(Dot + Box Plot)
  5. Python计算医疗数据训练集、测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数、连续变量的均值(标准差)以及训练测试集阳性阴性的p值、离散变量的分类统计、比率、训练测试集阳性阴性的p值
  6. R语言ggplot2可视化在分面图(facet_grid)的条形图上添加计数(count)或者百分比(percent)标签实战
  7. R语言临床诊断试验的ROC分析方法示例
  8. 随机森林中的Bootstrap抽样是有放回抽样么?Bootstrap抽样过程描述一下
  9. 影像组学视频学习笔记(14)-特征权重做图及美化、Li‘s have a solution and plan.
  10. oracle元字符,oracle中正则表达式的基本元字符