如何使用特定的SSH Key提交GIT
问题提出
最近在自己的MAC上面提交Github代码的时候发现居然失败了:
$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
这不是坑爹吗,Github都提交过无数次了,咋就失败了呢?莫非Github上的ssh key被删掉了么。于是打开github ssh,尝试再次把ssh key加上,却提示key已经存在了。于是赶紧回到本地repo查看下用户是不是对的:
$ git config -l
...
user.email=keysaim@gmail.com
user.name=keysaim
再查看下本地的ssh key:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCu4Jy/+uFGiC89luBejzCEyPbY0SRoppyzrB4g1v3zv1OleylMzdf+eTTRcYgMbYoY6ZQs4M2NHX20iO6vf6j2uPvUsB++pP0G6Q7+VlrUlC19B07IVx7Mo2xmHCe4bMshFSugqOl+hV6zVjGpYJcLI9XtWQ6F/br4tkYD/J8KWns+SNha8gJVBckV1ncGlR+Q7ji4OM4+eIhKEEK4Wo7Cf7KaT71fIVFl7XRx5kmdtEN3F+wT4LjNb2okl8Pu4mmxCMwJvXzj0Jr9PkVzhSAhDkWG3mMt3kC5PhhRhCP7uwkGFsOEm5uGS907wTxY9cJNIl8FikOfmvDa5XrfMbMx nbaoping@xxx.com
发现邮件居然是nbaoping@xxx.com(此处已打码),显然跟本地repo的keysaim@gmail.com不同,git提交的时候没有特殊配置,会使用默认的ssh key,也就是~/.ssh/id_rsa.pub,而提交的用户信息跟此key并不能对应上,故此github拒绝了此次提交。既然如此,那把本地repo的用户信息改成key所对应的信息不就好了吗?是的,但是此信息都已经打码了就充分说明本博主是十分不愿暴露它的,咱必须得想其它辙。
好了,现在的问题就是,如何使用特定的ssh key提交Git?本文就来讲述一种通用的解决办法。
指定git提交使用的ssh key
查看repo对应的hostname
$ git remote -v
origin git@github.com:keysaim/keysaim.github.io.git (fetch)
origin git@github.com:keysaim/keysaim.github.io.git (push)
其中
github.com就是repo使用的hostname。查看repo的用户信息
$ git config -l
...
user.email=keysaim@gmail.com
user.name=keysaim
最关键的是邮件信息
keysaim@gmail.com。如果没有用户信息,可以先配置:$ git config user.email "keysaim@gmail.com"
$ git config user.name "keysaim"
注意,很多教程里面以及
git的错误提示里面会建议在git config后面加入参数git config --global,这里,千万不要加入此参数,否则它会去尝试修改你的git的全局配置,也就是你所有repo默认的用户信息。你可以在文件~/.git/config查看你的全局配置,其中[user]段就是你的默认用户信息。咱们这里就是为了能够给这个repo指定特定的ssh key,显然不适合使用全局的配置。为repo的用户生成新的ssh key
$ ssh-keygen -C "keysaim@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/nbaoping/.ssh/id_rsa): id_rsa.github
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.github.
Your public key has been saved in id_rsa.github.pub.
The key fingerprint is:
SHA256:G0djI0bh+XwGcwOZ0AsbQ8ffB51pYrfSlRALNZw3igc keysaim@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
| .==o+o=+.+|
| o+o=E.=+Oo|
| ==Bo*oB.+|
| ..*.B.=.o.|
| S + + .. |
| + o |
| . |
| |
| |
+----[SHA256]-----+
其中,
-C是用来指定该key的用户信息的,这里咱们使用了keysaim@gmail.com。该命令是一个交互式的命令,其中大部分你都可以直接回车,但是对于第一个提示Enter file in which to save the key,请务必输入你想要的文件名,否则它将覆盖你默认的ssh key,这个可是不可逆的。这里使用文件名id_rsa.github。如果没有指定文件夹在路径中,该命令会在当前目录下生成key文件:$ ls id_rsa.github*
id_rsa.github id_rsa.github.pub
其中
id_rsa.github是私钥,而id_rsa.github.pub为公钥。将key文件移到ssh目录下~/.ssh/:$ mv id_rsa.github* ~/.ssh/
配置ssh以使用新的key
修改ssh的配置文件
~/.ssh/config,加入如下配置:Host github.com
HostName github.com
User git
IdentityFile /Users/nbaoping/.ssh/id_rsa.github
IdentitiesOnly yes
下面逐行解释:
Host github.com用来指定该key的Host名字,此处必须使用本地repo的hostname
github.com。Hostname github.com此处指定
Host对应的具体域名,这里跟Host保持一致。(Host跟Hostname可以不一致,但是Host必须跟repo的hostname保持一致,也就是git到时候会用自己repo的hostname来ssh配置文件里面找是不是有对应的Host,找到了就使用该配置,具体访问的域名会采用HostName)User git说明该配置的用户得是git
IdentityFile /Users/nbaoping/.ssh/id_rsa.github这行最为关键,指定了该使用哪个ssh key文件,这里的key文件一定指的是私钥文件。之前我们生成了新的私钥文件
~/.ssh/id_rsa.github,由于博主使用的是MAC,~被翻译成/Users/nbaoping/了,如果是在一般的Linux环境下,改路径前缀该是/home/nbaoping/。IdentitiesOnly yes请配置为
yes,具体意义可以参考讨论。
将生成的ssh key加入
github打开github ssh key配置页面,点击
New SSH Key,给刚刚生成的key取名,如keysaim-mac。把~/.ssh/id_rsa.github.pub(请务必注意是公钥文件,千万不要搞错了)里面的内容拷贝过来,点击Add SSH Key按钮保持。提交
做完上面的步骤之后,就可以提交了:
$ git push origin master
Counting objects: 63, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (62/62), done.
Writing objects: 100% (63/63), 838.96 KiB | 0 bytes/s, done.
Total 63 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To github.com:keysaim/keysaim.github.io.git
73a2043..88cacc1 master -> master
可以看到,这次提交成功了。
结语
当你需要把某些repo以不同的用户提交的时候,可以按照本文给他们配置特殊的ssh key,但是注意的一点就是,这种配置事基于Host,也就是repo的hostname,如果需要确保不同的repo使用不同的ssh key,需要每个repo使用不同的hostname。
本文也可以在博主个人博客中查看。
如何使用特定的SSH Key提交GIT的更多相关文章
- git生成公钥public key并添加SSH key。git乌龟gerrit下推送git【server sent :publickey】
一.key 码云链接:http://git.mydoc.io/?t=180845#text_180845 博客链接: 方式一:https://blog.csdn.net/xb12369/article ...
- TortoiseGit的ssh key和Git的ssh key
情景模拟: 你使用Git+TortoiseGit对项目进行版本控制,本地库(自己电脑建立的.git)与远程库(如GitLab上建立)通信需要使用ssh验证,你用git生成公钥并保存到了Gitlab上, ...
- git配置多个ssh key
随着工作的深入,我们通常都会有多个git账户.比如公司gitlab一个账户,github或gitee有一个账户.而平时我们又回通过 配置ssh公私钥认证的方式省去繁琐的登录远程仓库的操作,不同的git ...
- 设置 SSH Key 登录服务器和 Git 服务器
设置 SSH Key 登录服务器 通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里. ...
- Git生成本机SSH Key并添加到GitHub中
1.检查电脑里是否有SSH Key 打开git Bash客户端 cd ~/.ssh ls 如果有就会输出下面内容 config id_rsa id_rsa.pub known_hosts 2.创建 邮 ...
- 「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库
「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库 Part 0 前言 写作背景 笔者在配置学校GitLab的ssh key时遇到一些问题,原因应为曾经配置过GitHub的s ...
- github 添加 SSH key
在 github 上添加 SSH key 的步骤: 1.首先需要检查你电脑是否已经有 SSH key 运行 git Bash 客户端,输入如下代码: $ cd ~/.ssh $ ls 这两个命令就是检 ...
- github入门:设置添加ssh key<转>
GitHub是个分布式的版本控制库.github通过git使用,可以方便的记录代码版本. 通过github可以学习优秀的代码,可以改进提交其他项目中的bug,借助社区力量促进软件优化完善. 国内外大量 ...
- SSH连接GitHub并配置ssh key
SSH连接GitHub并配置ssh key 配置git的ssh提交,主要需要以下三步: 1.设置Git的user name和email 2.生成ssh 3.配置git 的ssh key 一.设置Git ...
- 多个github帐号的SSH key切换
写在前面的话 github账号,工作有一个,自己有一个.但是默认下使用ssh key在git push时只有默认账号能免输入账号和密码. 如果想让另一个账号在代码push时免账号和密码,请看这篇文章h ...
随机推荐
- SCHED_RR和SCHED_FIFO的区别
SCHED_RR和SCHED_FIFO是Linux内核中用来调度进程的两种调度策略,它们有以下几点区别: 调度方式:SCHED_RR采用轮转调度方式,而SCHED_FIFO则采用先进先出调度方式. 优 ...
- 使用 reduce 统计字符串每个字母出现的次数
// 统计字符串每个字母出现的次数 let str = 'asdfssaaasasasasaa' let obj = str.split('').reduce(function (prev, item ...
- token有⼀定的失效性,过期了该怎么做?
token 失效分为主动失效和被动失效 主动失效 就是自己设置函数检查token是否失效了, 主要步骤 :1 1.在登录的时候记录存储token的时间, 2. 在request文件,设置一个函数,用来 ...
- 0403-Tensor内部存储结构
0403-Tensor内部存储结构 目录 一.Tensor内部存储结构 pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.htm ...
- WebAssembly 基础以及结合其他编程语言
0x00 WebAssembly 基础 详情参考<WebAssembly | MDN> (1)概述 WebAssembly 简称 WASM 或 WA,是一种新的编码方式,可以在现代的 We ...
- 现在 Llama 具备视觉能力并可以在你的设备上运行 - 欢迎使用 Llama 3.2
Llama 3.2 来了!今天,我们欢迎 Llama 系列的下一个版本加入 Hugging Face.这次,我们很高兴与 Meta 合作发布多模态和小型模型.在 Hub 上提供了十个开源模型 (5 个 ...
- RocketMQ 5.0 如何配置TLS加密传输?
本文作者:李伟,社区里大家叫小伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云Ro ...
- C语言之声明
C语言之声明 1.声明与定义 声明语法 说明符(说明类型或修改缺省属性) 声明表达式列表 说明符 类型说明:int, float 存储属性:static,auto 类型限定:const, volati ...
- Halcon 快速入门教程
文章首发于我的 github 仓库-cv算法工程师成长之路,欢迎关注我的公众号-嵌入式视觉. 本人水平有限,文章如有问题,欢迎及时指出.如果看完文章有所收获,一定要先点赞后收藏.毕竟,赠人玫瑰,手有余 ...
- kubectl常用命令(一)
一.查看 1.查看集群状态 # 查看客户端及服务端程序版本信息 kubectl version --short=true