同篇文章以Gitee举例, 支持国产, 首先关联一下我的另外一篇文章:

在码云上添加公钥时提示不允许重复添加(实际上当前公钥数为0)

在这篇文章中, 我后续有补充解释为什么会出现我之前没有弄明白的这个提示, 是因为时间间隔久远我用手机号和邮箱分别注册了一个gitee账户.

而我为了ssh方便, 自始至终保存了一套公钥私钥, 而她被用在了我之前注册的那个账号上, 于是在新的账号上提示不允许重复添加.

很容易理解, 她重复的作用域是整个gitee服务器.

要解决这个问题, 我势必要产生两套公钥私钥, 那么问题来了, 如何让他自动选择应该使用的那一套呢?

网上查了资料, 写一个ssh的config, 参考了这篇文章:

https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/

就是在.ssh文件夹下面新建一个config文件, 里面的格式大概这样:

Host server1
HostName server1.cyberciti.biz
User nixcraft
Port 4242
IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa

依葫芦画瓢搬过来目测不太好使, 因为他通篇介绍的是如何区别不同的服务器使用不同的密钥, 而没有介绍如何在同一个服务器使用不同的密钥.

然后我在GitHub上看到了另外一篇文章:

https://gist.github.com/jexchan/2351996

这个很符合我的胃口, 描述的是如何对同一个服务器使用两套密钥:

#account1
Host gitee.com-jerryqii
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa #account2
Host gitee.com-jerryqi
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa1

然后在你的仓库设置远程地址:

git remote set-url origin git@gitee.com-jerryqi:jerryqi/nb.git

大喜, push成功了!

然而这也让我非常困惑, [git@gitee.com-jerryqi], 域名能够写成gitee.com-jerryqi这种格式的? 还带一个用户名? git的协议到底是怎样的?

StackExchange给了我答案, 请参考这篇文章:

https://superuser.com/questions/366649/ssh-config-same-host-but-different-keys-and-usernames

总结下来就是, 上面我提到的gitee.com-jerryqi并不是一个域名, 而是host的一个别名.

当没有config文件存在的时候, host的别名就是域名, 这个很好理解.

而当有config文件存在的时候, 他会通过host去找HostName以及IdentityFile.

上述造成我误解的原因还是在于我使用了[域名]-[用户名]的关系, 实际上他可以是任何名字, 只需要在config中进行相同的修改即可.

完毕!

Git使用两个用户名两个公钥链接同一个Git服务器的更多相关文章

  1. 一个看起来不像中年人的中年人,带着两个初出茅庐的小伙子儿,用git管理项目代码的进击之路

    一个中年人的孤独前行 我们这一代人,是上个世纪的人,活在当下,已然成为社会上的中流砥柱. 80年代生人,遥望我们的父辈,均是5.60年代的人,迟迟暮年,夕夕老矣.而我们,正当年,却又时光飞逝,很快便要 ...

  2. Git恢复之前版本的两种方法reset、revert(图文详解)(转)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...

  3. git cherry命令来比较两个分支的不同

    git cherry 命令使用 1. 两个参数的情况 git cherry -v origin/master asa 比较本地的asa分支和远程master的差别 git cherry -v mast ...

  4. Git恢复之前版本的两种方法reset、revert

    实战 回退 1.删除之前的提交 git reset --hard id 推送到远程 git push -f [git log中确实删除了,但是拿到可以恢复] 2.不删除之前的提交 git revert ...

  5. git代码回滚的两种选择

    回滚到指定commit,且保持该commit之前和之后的提交记录 使用git revert命令. git revert HEAD // 回滚到前一次 commit git revert HEAD^ / ...

  6. Git修改和配置用户名和邮箱

    git在push/push to时需要使用到user.name和user.email,切记一定要现配置好查看user.name/user.email git config user.name git ...

  7. Git中如何利用生成SSH个人公钥访问git仓库

    Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...

  8. Git Windows客户端保存用户名与密码

    1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图: 2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的文件. 3. 用记事本打开_n ...

  9. git push跳过用户名和密码认证配置教程

    在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构. 新 ...

随机推荐

  1. List<Map<String, Obejct>>遍历

    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map&l ...

  2. git命令如何删除文件或文件夹

    拉取远程仓到本地 git clone ×× cd ××× 查看分支 git branch -a 切换到想要操作的分支 git checkout 想要操作的分支 在本地仓库删除文件 git rm 我的文 ...

  3. CSPS模拟86-87

    模拟86 T1,烧水,按位统计贡献,利用某种sao操作避免数位dp #include<iostream> #include<cstdio> #include<cstrin ...

  4. 扩展kmp学习笔记

    kmp没写过,扩展kmp没学过可还行. 两个愿望,一次满足 (该博客仅用于防止自己忘记,不保证初学者能看懂我在瞎bb什么qwq) 用途 对于串\(s1,s2\),可以求出\(s2\)与\(s1\)的每 ...

  5. vue中router-link的详细用法

    官网文档地址:https://router.vuejs.org/zh/api/#to 今天项目突然有需求,让vue中的一个页面跳转到另一个页面 // 字符串 <router-link to=&q ...

  6. javaee三层架构案例--简单学生管理系统

    背景 学了jdbc.jsp等需要串起来,不然会忘记 项目环境 win10 jdk11 mysql8.0.13 jar包 c3p0-0.9.5.2 commons-dbutils-1.7 jstl mc ...

  7. C语言中的多线程

    原文:https://www.cnblogs.com/yorkyang/p/7804733.html 线程的优点: 减少系统调度开销,不占有独立的资源,切换速度快,执行效率高. 线程间通信方便,可共享 ...

  8. LeetCode设计实现题(一)

    一.LRU缓存机制(LeetCode-146) 1.1 题目描述 1.2 解题思路 思路1: 使用Map存放key,value,使用List存放key和count,count为最新的index值,每次 ...

  9. uiautomator代码例子--java

    在androidtest下创建文件Ui2Test.java package com.example.myapplication; import android.app.Instrumentation; ...

  10. 按比例吃CPU

    前几天测试软件在多核上的性能,需要按照比例吃各个CPU,查了查资料,撸了下面一小段代码: #include <unistd.h> #include <stdlib.h> #in ...