如何使用特定的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 ...
随机推荐
- netCore 封装一个检验邮箱的类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Nuxt3+PM2集群模式启动及勘误
起因 之前写过一篇 Nuxt3 的文章,Nuxt3 环境变量配置,用到了 PM2,但是里面的一些配置存在问题,最近有空又验证了一下,这里做一个勘误. 问题 PM2 的启动配置中有一项是exec_mod ...
- 云原生爱好者周刊:长得最像苹果的 Linux 桌面
云原生一周动态要闻 SUSE 发布 Harvester 0.2.0 IBM 收购容器服务提供商 BoxBoat Kubernetes 和云原生运营报告 2021 发布 适用于 Kubernetes 的 ...
- SpringBoot 2.3 升级到 SpringBoot 2.7 爬坑-- SpringDoc & Swagger
目录 POM yml 配置自定义的 OpenAPI 规范 拦截器去除 swagger 的接口验证 模型 Controller 配置 常用注解 注意:Swagger支持SpringBoot2.0但不支持 ...
- ToDesk云电脑手机也能玩?安卓系统已上线!
近日,ToDesk云电脑首次发布移动端!这次云电脑将安卓和iOS双系统都安排上了,基本照顾到所有移动端的用户.并且性能也保持了电脑版的高配置,价格还是那么优惠. 我用了一次都有点不想退出了,用来打游戏 ...
- MongoDB mongod.log "connection refused because too many open connections" 处理方法
一.MongoDB副本集 副本集名称 角色 IP地址 端口号 优先级 CCTV-test Primary 192.168.1.21 27017 10 Secondary 192.168.1.21 27 ...
- BAT之shutdown命令
今天想让电脑开机后固定时间后重启,但之前只用过关机的命令,就去查询资料,并将shutdown的命令用法整体记录一下. 1 ::取消关机 2 shutdown -a 3 4 ::关机 5 shutdow ...
- Maven的顶级功能——依赖管理
依赖管理 依赖管理解决的问题 我们学完一个语言的语法之后,我们应该都能知道函数的引用或者类的创建等了.为了方便管理,我们就会把一些特定的功能实现写在一个代码文件中,我们只需要使用的时候导入就行了,这样 ...
- chrome浏览器自定义安装方法
chrome浏览器有很多比较好的方面,也是很多人首选的浏览器.对于想自定义安装chrome浏览器的小伙伴来说,关于chrome浏览器默认安装到C盘让人很无奈.网上有说直接将C盘的文件夹放到想安装的文件 ...
- 开源 - Ideal库 - 常用枚举扩展方法(二)
书接上回,今天继续和大家享一些关于枚举操作相关的常用扩展方法. 今天主要分享通过枚举值转换成枚举.枚举名称以及枚举描述相关实现. 我们首先修改一下上一篇定义用来测试的正常枚举,新增一个枚举项,代码如下 ...