如何使用特定的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 ...
随机推荐
- eUSB是什么/可以干什么?
eUSB总结 1.什么是eUSB 1.1 eUSB概念 eUSB是原USB物理层上的补充,为了解决USB_phy低压需求的问题而出现的,eUSB可以将信号电平降至1.2V甚至更低,与此同时可以优化电源 ...
- EAS(能量感知调度)绿色节能调度器
能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响. EAS 依赖于 CPU 的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小. EA ...
- 什么是 Ajax,Ajax 的原理,Ajax 都有哪些优点和缺点
ajax是异步的js和xml,是一种创建交互式网页的开发技术,是和服务器进行异步通讯的技术 : 核心就是使用XMLHttpRequest向服务器发送请求获取数据 : 优点: 页面不需要刷新,用户体验良 ...
- DIY Matter Bridge 和智能锁简单联动的实践
一. 写在前面 在之前的博客文章 <基于乐鑫 ESP32-C3 的 Matter Light 实践>中,我们利用乐鑫的硬件和 SDK 方案实现了简单的 Light 例程,并对 Matter ...
- 云原生周刊:GitOps 的 4 条核心原则
日前在温哥华举行的 cdCON + GitOpsCon 上,分享内容以 GitOps 原则为特色: GitOps 是声明式的: GitOps 应用程序是版本化的和不可变的: 自动拉取 GitOps 应 ...
- 云原生爱好者周刊:使用树莓派组建 K8s 集群 | 2022-08-08
开源项目推荐 Raspberry Pi Kubernetes Cluster 这是一个教育项目,旨在探索如何在家中使用树莓派构建 Kubernetes 集群,并使用 Ansible 来自动化部署和配置 ...
- C语言数据类型和变量
目录 1.数据类型介绍 1.1字符型 1.2整形 1.3浮点型 1.4布尔类型 1.5各种数据类型长度 1.5.1sizeof操作符 1.5.2数据类型长度 1.5.3 sizeof中表达式不计算 2 ...
- selenium3环境搭建,Firefox与对应的geckodriver, chrome与对应的Chromedriver
Firefox与对应的geckodriver 火狐下载:http://ftp.mozilla.org/pub/firefox/releases/ geckodriver下载:https://githu ...
- 如何在国内使用gcr.io镜像进行拉取
[root@k8scloude2 ~]# docker pull gcr.io/google-samples/microservices-demo/emailservice:v0.4.0 换成 [ro ...
- Go语言:未指定类型的常量(untyped int constant)和大整数的关系
运行下面的代码: 点击查看代码 package main import "fmt" const ( Big = 1 << 100 ) func needFloat(x ...