多个git账户生成多份rsa秘钥实现多个账户同时使用配置


使用过git的童鞋应该对id_rsa秘钥不陌生,总得用github吧,生成id_rsa很容易:

ssh-keygen -t rsa -C "$your_email"

默认情况下,这个秘钥是在你账户的.ssh目录生成id_rsa文件,对应一个id_rsa.pub公钥文件,

$ ssh-keygen -t rsa -C "test@test.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/zhong/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/zhong/.ssh/id_rsa.
Your public key has been saved in /c/Users/zhong/.ssh/id_rsa.pub.
The key fingerprint is:
5b:44:7e:b8:e5:20:3b:a8:2b:63:45:c0:f8:73:87:f3 test@test.com
The key's randomart image is:
+--[ RSA 2048]----+
| o        .      |
|. o      o .     |
| . . .  . = o    |
|  o = .. + *     |
|   + +. S o .    |
|    ..E  +       |
|   ..   .        |
|  +  .           |
| . o.            |
+-----------------+

秘钥是跟email地址绑定的,上面生成的秘钥是秘钥是以test@test.com生成的,所以你可以在任何用以test@test.com地址认证的地方使用id_rsa.pub公钥校验你的私钥,因为系统默认在校验的时候就会读取你.ssh/id_rsa这个秘钥文件。
这在使用单一秘钥的用户来说,是没有任何问题,然而你可能还有别的邮箱账户,需要生成两份秘钥,于是你在生成的时候呢就要注意重名,别把已存在的id_rsa给覆盖了。

$ ssh-keygen -t rsa -C "test2@domain.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/zhong/.ssh/id_rsa): /c/Users/zhong
/.ssh/id_rsa_gitlab
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/zhong/.ssh/id_rsa_gitlab.
Your public key has been saved in /c/Users/zhong/.ssh/id_rsa_gitlab.pub.
The key fingerprint is:
5b:44:7e:b8:e5:20:3b:a8:2b:63:45:c0:f8:73:87:f3 test2@domain.com
The key's randomart image is:
+--[ RSA 2048]----+
| o        .      |
|. o      o .     |
| . . .  . = o    |
|  o = .. + *     |
|   + +. S o .    |
|    ..E  +       |
|   ..   .        |
|  +  .           |
| . o.            |
+-----------------+
在Enter file inwhich to save the key提示这个地方敲入生成私钥的名称,因为是要保留默认的私钥,所以你需要另外取一个名称,如果你敲入的秘钥名称已经存在,那么会提示你同名的秘钥文件已经存在,是否要覆写:

$ ssh-keygen -t rsa -C "test@test.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/zhong/.ssh/id_rsa):
/c/Users/zhong/.ssh/id_rsa already exists.
Overwrite (y/n)?
以上我生成了两份秘钥,分别是默认的id_rsa与id_rsa_gitlab,所以.ssh目录下应该有这些文件:

zhong@LEE ~
$ ls .ssh
id_rsa  id_rsa.pub  id_rsa_gitlab  id_rsa_gitlab.pub  known_hosts
对应pub结尾的都是公钥,接下来,就是要配置一下ssh让系统可以找到id_rsa_gitlab这个公钥,按照google的结果,只需要执行ssh-add 秘钥路径即可

$ ssh-add /c/Users/zhong/.ssh/id_rsa_gitlab
Could not open a connection to your authentication agent.
而我在执行命令时提示:Could not open a connection to your authentication agent.,也许这是很多人遇到的问题,所以相应的都提示如果出现这个错误就先执行以下ssh-agent bash然后在执行ssh-add命令就可以了

$ ssh-agent bash
bash-3.1$ ssh-add /c/Users/zhong/.ssh/id_rsa_gitlab
Could not open a connection to your authentication agent.
结果显示,我即使先执行了ssh-agent bash还是不能解决问题,搜罗一大圈也没发现可解决的方案。这一步是一定要配置的,否则即使你把公钥贴到git主机并且尝试连接id_rsa_gitlab这个账户的主机的时候,因为它默认会找到id_rsa这个秘钥做校验,结果肯定是校验不过,于是就会有以输入密码提示:

$ ssh -T git@192.168.1.2
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established
 
RSA key fingerprint is d9:8c:82:18:e7:86:3f:7d:ee:01:9d:bb:7d:40:86:5e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (RSA) to the list of known hosts.
git@192.168.1.2's password:
而默认的id_rsa账户校验仍然是没有问题的

$ ssh -T git@github.com
Hi lizhong! You've successfully authenticated, but GitHub does not provide s
hell access.
在找半天发现不能解决ssh-add命令问题后无意中看到了config配置,于是我就跳过ssh-add直接在.ssh下新建config文件:

Host github.com
    HostName        github.com
    User            git
    IdentityFile    /c/Users/zhong/.ssh/id_rsa
    
Host 192.168.1.2
    HostName        192.168.1.2
    User            git
    IdentityFile    /c/Users/zhong/.ssh/id_rsa_gitlab
清空known_hosts文件再测试,都正常了

zhong@LEE ~
$ ssh -T git@github.com
The authenticity of host 'github.com (192.30.252.130)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of know
n hosts.
Hi lizhong8532! You've successfully authenticated, but GitHub does not provide s
hell access.
 
zhong@LEE ~
$ ssh -T git@192.168.1.2
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
 
RSA key fingerprint is d9:8c:82:18:e7:86:3f:7d:ee:01:9d:bb:7d:40:86:5e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (RSA) to the list of known hosts.
Welcome to GitLab, lizhong!

如果配置不好,还提示输密码的童鞋可以这样测试

ssh -vv "your githost"

就能看见整个debug过程,重点是看看有没有读到相应的config文件并匹配到host然后读取host配置下的对应的私钥,一般如果私钥配对成功那基本都没有问题

时间: 2024-08-01 23:15:14

多个git账户生成多份rsa秘钥实现多个账户同时使用配置的相关文章

rsa-RSA算法如何生成一个长度较短的秘钥

问题描述 RSA算法如何生成一个长度较短的秘钥 正在使用RSA算法生成秘钥,但是生成的秘钥是在太长,有知道如何生成短一些的秘钥的吗 解决方案 你生成的时候可以指定长度的 比如openssl http://blog.csdn.net/tsuliuchao/article/details/8447690 genrsa -out rsa_private_key.pem 1024 解决方案二: http://www.educity.cn/wenda/457162.html 参考.

rsa-急求一份RSA算法加解密的C语言程序,有重谢!C币少还可再加的呦

问题描述 急求一份RSA算法加解密的C语言程序,有重谢!C币少还可再加的呦 谁能帮忙给写一个RSA算法加解密的C语言程序啊,有重谢. 要求:1.提供两个函数,一个用来加密,一个用来解密: 2.每个函数都有一个参数,用来调用的时候传入需要加解密的字符串, 注意是直接传入而不是获取键盘的输入,比如在ios开发中进行调用将 网络请求的数据(该数据可以直接当做字符串)传入: 3.函数的返回值是字符串,将加解密后的字符串返回即可: 4.私钥进行加密,公钥进行解密,公私钥是直接写死到程序里面的,而不是每次运

mysql通过ssl的方式生成秘钥具体生成步骤_Mysql

-- mysql ssl 生成秘钥 1 check ssl是否已经开启 mysql> show variables like '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert |

使用CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件

要安装kubernetes最新版集群,https://github.com/opsnull/follow-me-install-kubernetes-cluster 这个文档必须要研习一下了. 以下实验就摘自这个文档的开始. ================================================ 使用CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件, CA 是自签名的证书,用来签名后续创建

php-java 利用md5生成带秘钥的哈希值 有相应的函数吗

问题描述 java 利用md5生成带秘钥的哈希值 有相应的函数吗 哪位大牛知道php的 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] ),在java中有对应的函数吗 解决方案 JAVA生成HMAC-SHA1数据签名 解决方案二: 上面的SHA1的,还有HMAC-MD5 算法的java实例和BASE64,MD5,SHA,HMAC加密解决算法 解决方案三: Java实现MD5加密

为什么XShell登录的用户不用事先生成秘钥

问题描述 为什么XShell登录的用户不用事先生成秘钥 看ssh的原理上说的,在一个用户可以进行ssh登录之前,他需要先在客户端生成自己的密钥对,然后通过安全的方式将秘钥对里的公钥放到服务器上~/.ssh/keyras_pub下面,但是实际用XShell登录的时候确不需要生成,直接登录就可以了,这是什么原理呢?求指点. 解决方案 如果是用密码方式就不需要私钥

美国空军数千份高度机密文件被泄 备份服务器竟无秘钥

据外媒报道,没有设置密码验证的备份服务器暴露了数千份美国空军的文件,包括高级军官的高度敏感个人文件资料. 安全研究人员发现,任何人都可以访问数GB的文件,因为联网备份服务未设置密码保护. 国外新闻网站查看文件后发现,这些文件包含一系列个人文件,例如4000多名军官的姓名.地址.职级和社保号.另一份文件罗列了数百名其它官员的背景调查(Security Clearance)等级,其中一些军官拥有能访问敏感信息和代号级别的"最高机密"许可.文件还包含数个电子表格,其中罗列了工作人员及其配偶的

多git账户操作

使用场景:一个是公司的git服务器,一个是csdn的git服务器. 什么是ssh? 这是一个应用层协议,同https类似都是为了保密. 使用https或ssh方法都可以与git服务器通信,上传代码或下载代码.https需要每次输用户名密码(貌似这样),比较麻烦:ssh需要在客户端生成凭证(就是私钥与公钥),把公钥添加到服务器,就可以了. 1.生成多个ssh秘钥 ssh-keygen -t rsa -C "new email" 按照提示,保存到新的文件中,比如我指定"id_rs

请问如何使用openssl生成的rsa公钥对字符串加密

问题描述 最近正在研究关于C#的RSA加密解密,发现C#的RSA操作不是一般的复杂,在PHP中对RSA秘钥加密解密太容易了,可是在C#中我一直弄不来,求各位大神赐教.我发现C#的引入秘钥文件基本都是XML格式的,可是我找遍了网上也没有发现PEM格式的公钥如何转成XML文件.头大.我现在有一个公钥文件:比如-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+4wMxpYajfEuizAZxreikjQY0AjrtnKnnV