Github配置SSH密钥连接(附相关问题解决)

news2024/10/6 14:38:11

Github配置SSH密钥连接(附相关问题解决)

引言

当前,通过Git在本地仓库和远程仓库(如Github)之间进行操作,已不再支持密码验证,而是转为通过更安全的SSH密钥验证方式。

因此,本文将介绍如何生成SSH密钥以及将其添加到Github中,此外也会介绍配置过程中常见问题的解决方法。


1. 生成SSH密钥

首先在本地机器上打开终端,输入以下命令生成SSH密钥

ssh-keygen -t ed25519 -C "<your github email>"
# -C后面的是自定义的密钥注释/标签,这里一般输入自己的邮箱
# -----------------------------------------------
# 运行上述命令,会询问你是否自定义密钥名字/路径,以及是否需要给该密钥添加密码,敲回车是跳过
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/home/xxx/.ssh/id_ed25519): github_auth
# Enter passphrase (empty for no passphrase): 
# Enter same passphrase again: 
# Your identification has been saved in github_auth.
# Your public key has been saved in github_auth.pub.
# The key fingerprint is: xxx
# The key's randomart image is: xxx
# -----------------------------------------------
# ed25519是目前最安全、加解密速度最快的key类型。
# 但有些旧版本的SSH还不支持ed25519算法,这时候可以用rsa算法。
# 因此,有ed25519就用ed25519,没有就用rsa。
ssh-keygen -t rsa -b 4096 -C "your github email"

2. 添加密钥到ssh-agent(Optional)

如果是自定义了密钥名字(例如我上面将密钥名字从默认的id_ed25519修改为github_auth),此时就需要自己手动添加密钥到SSH认证代理ssh-agent中。当然,如果没有自定义名字,可以不进行这一步操作,默认的名字是默认自动添加到SSH认证代理中的。

首先,在后台启动ssh-agent

eval "$(ssh-agent -s)"
# 输出:Agent pid 59566

然后,把之前生成的SSH密钥添加到ssh-agent

ssh-add ~/.ssh/github_auth
# 输出:Identity added: github_auth (xxxx) 

3. 添加密钥到Github账户

生成SSH密钥后,复制公钥内容到自己的Github账户中。具体地,点击Github右上角账户图标→Settings→SSH and GPG keys→New SSH key,在Key一栏粘贴公钥内容,在Title一栏设定这个SSH密钥的标识

cat ~/.ssh/github_auth.pub
# 把终端输出的内容复制到Github账户中

在这里插入图片描述

在这里插入图片描述


4. 验证

执行完上述两步操作后,正常情况下已经配置成功了,此时可以验证一下:

ssh -T git@github.com
# 如果输出以下内容,则表示配置成功,此时即可直接进行任何git操作。
# Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

相关问题解决

Permission denied

如果在配置完成后,通过ssh连接github时,报错:

# Permission denied (publickey).

大概率是因为:自定义了密钥名字/路径,但没有执行第二个步骤将密钥添加到SSH认证代理中

可以输入以下命令验证是否生成了密钥以及是否有添加到SSH认证代理中,如果没有就按第二步骤操作一遍。

ssh-add -l -E sha256
# 如果配置失败,则没有任何输出;如果配置成功,则会输出类似以下内容
# 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)

除了通过ssh-add的方式外,也可以通过设置config文件让SSH认证代理能找到这个密钥文件,从而解决这个问题:

vim ~/.ssh/config
# 打开(如果没有就创建一个)config文件,并输入以下内容。
# 此外,需要注意,config文件的权限需是600。

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/github_auth # 这里输入你的密钥路径

Support for password authentication was removed …

在配置好SSH后,进行git操作时,仍要求输密码,即使输入了正确的账户和密码,还是报错:

# remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
# remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
# fatal: Authentication failed for 'https://github.com/xxx/xxx.git/'

出错的原因在于:本地仓库在clone时使用的是HTTPS URL,故该仓库此时的remote协议会是HTTPS协议,然而SSH密钥连接只支持SSH URL,不支持HTTPS URL,故会要求输账户密码

此时,通过以下命令可以查看到仓库的remote协议是HTTPS协议:

git config --get remote.origin.url
# 如果输出类似以下内容,则说明remote协议是HTTPS协议
# https://github.com/xxx/xxx.git

# 也可以查看仓库内的.git/config文件,查看url是git协议还是https协议。
# [remote "origin"]
#   url = https://github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
#   fetch = +refs/heads/*:refs/remotes/origin/*

因此,需要将remote协议从HTTPS协议修改为GIT协议。在本地仓库路径下输入以下命令:

git remote set-url origin git@github.com:xxx/xxx.git

此时,再进行git的pull/push操作就不再需要输密码了,直接可以通过SSH密钥认证。


参考文献

  • Generating a new SSH key and adding it to the ssh-agent - GitHub Docs

  • Error: Permission denied (publickey)

  • git配置ssh登陆后,却一直提示要输入密码?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正态分布线性计算的方差推导(含协方差推导)

推导如下&#xff1a; 由于方差是每个数据与均值离差平方和的均值&#xff1a;即对Σ&#xff08;每个数据-均值&#xff09;再求一次均值&#x1f447;&#xfeff;&#xfeff; 最终Var(X) E(X&#xff09;-E&#xff08;X) 因此&#x1f447; Var(X-Y) E(X-Y)-E(X-Y) …

mysql的主从复制和读写分离

1.mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 …

一个用于Allen脑图谱基因数据的工具箱|abagen

艾伦人类脑图谱&#xff08;Allen Human Brain Atlas&#xff09; 艾伦人类脑图谱是一个由艾伦脑科学研究所(Allen Institute for Brain Science)开发的在线基因表达图谱数据库&#xff0c;旨在提供人类大脑各个区域的细胞类型和基因表达信息。这个数据库包含了人类全基因组微…

【C语言】通讯录(文件版)

前言 前面我们完成了通讯录的静态版本和动态版本&#xff0c;虽然功能已经比较完善了&#xff0c;但是前面的通讯录缺少了存储联系人的能力&#xff0c;所以我们学习了文件的操作管理&#xff0c;这里我们就用上一篇文章的知识来完成这次的文章吧。 关于通讯录的前两篇文章我放…

Lecture 15:元学习Meta Learning2

目录 Meta Learning – MAML MAML Reptile Meta Learning – Gradient Descent as LSTM Meta Learning – Metric-based Meta Learning - TrainTest as RNN Meta Learning – MAML Meta Learning&#xff1a;让机器自动找出learning algorithm Meta Learning的三个步骤&…

Oracle的学习心得和知识总结(二十五)|Oracle数据库Real Application Testing之真实应用测试概述白皮书

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

从零开始学习vue3.2项目开发

文章目录 参考B站视频&#xff1a;1、vue创建项目和打包1.1 安装node 版本1.2 打开vscode创建vue项目1.3 查看vite和vue版本信息1.4 运行项目1.5 打包项目1.6 安装插件自动导入vue模块1.7 其他&#xff0c;可忽略1.8 解决加载vue时显示的 vite vue字段&#xff08;vue项目初始化…

UNIAPP实战项目笔记67 加入购物车的前端和后端交互

UNIAPP实战项目笔记67 加入购物车的前端和后端交互 思路 前端商品详情页adCart加入购物车时直接发送数据到后端 后端创建接口直接接受前端发过来的数据&#xff0c;更新数据库中该用户的购物车数据 案例截图 代码 后端代码 index.js var express require(express); var rou…

多个pdf怎么合并成一个pdf?教您几招快速合并的方法!

多个pdf怎么合并成一个pdf&#xff1f;通常来说&#xff0c;将多个PDF文件进行合并是非常重要的。在我们日常工作中&#xff0c;我们经常需要使用PDF文件&#xff0c;比如合同、报告等。将多个相关的PDF文件合并成一个更大的文件可以方便我们查看和管理。这样&#xff0c;我们就…

Notion ai进阶【找到属于Notion ai的提示词】

导语&#xff1a;通过一段时间的使用和实验&#xff0c;我发现目前Notion ai的使用带有不同方向&#xff0c;所展示的能力也有所不同&#xff0c;回顾 上篇文章&#xff0c;我们了解到prompt在其中扮演重要角色&#xff0c;而在将Notion ai带入到Discord或其它使用场景下prompt…

重要通知|Sui测试网将于5月11日重置

致Sui社区成员们&#xff1a; 正如之前公告所述&#xff0c;部分社区成员发现测试网可能会定期清除数据并重新启动。鉴于此&#xff0c;我们宣布计划将于2023年5月11日进行首次测试网清除。 对于想要继续读取和访问当前测试网络的社区成员&#xff0c;请使用由Mysten Labs在…

怎么把webp文件转换为jpg?这几种方法值得学习!

怎么把webp文件转换为jpg&#xff0c;我想这样的问题对于那些和图片打交道不多的人来说确实有些困难吧。在我们要处理这个问题之前&#xff0c;我们先来了解一下图片格式webp吧。要是知道Youtube、Gmail、Google Play 中都可以看到 WebP 的身影&#xff0c;而 Chrome 网上商店甚…

Games104现代游戏引擎学习笔记04

渲染管线 显卡&#xff1a; SIMD指令&#xff1a;指令级并行运算。一个指令&#xff0c;4次运算。处理坐标运算&#xff0c;矩阵运算 SIMT&#xff1a;一个指令在多核上&#xff0c;同时做同样的指令操作。 现代显卡放了无数个小小的核。 因此&#xff0c;在做所有的绘制算法…

PCIE设备在设备上枚举过程

根端口枚举 Root Port (RP) 在枚举过程结束时&#xff0c;Root Port (RP)必须设置以下寄存器&#xff1a; Primary Bus, Secondary Bus和Subordinate Bus numbers Memory Base和Limit IO Base和IO Limit Max Payload Size Memory Space Enable bit Endpoint (EP) Endpoint …

Oxygen Feedback Crack

Oxygen Feedback Crack Oxygen Integration为您的社区提供了一种简单有效的互动和提供反馈的方式。它易于配置和集成&#xff0c;并且包括用户友好的界面和许多对评论员和管理员都有用的功能。Oxygen Feedback Enterprise允许您在自己的服务器上安装软件&#xff0c;以便更好地…

【数据结构】线性表之顺序表

目录 一、线性表的定义二、顺序表1. 顺序表的定义2. 顺序表的结构2.1 静态顺序表2.2 动态顺序表 3. 动态顺序表的接口实现3.1 顺序表的接口3.2 接口的实现 三、顺序表总结1. 动态顺序表的优点2. 动态顺序表的缺点 结尾 一、线性表的定义 线性表是 n (n > 0) 个具有相同特性…

日志服务器的搭建

日志服务器 在centos7系统中&#xff0c;默认的日志系统是rsyslog&#xff0c;它是一类unix系统上使用的开源工具&#xff0c;用于在ip网络中转发日志信息&#xff0c;rsyslog采用模块化设计&#xff0c;是syslog的替代品。 rsyslog特点 实现了基本的syslog协议 直接兼容syslo…

linkindList源码分析

前言 LinkedList &#xff0c;基于节点实现的双向链表的 List &#xff0c;每个节点都指向前一个和后一个节点从而形成链表。 LinkedList集合同时具有List集合和Queue集合的基本特征 类图 如下 1 个接口是少于 ArrayList 的&#xff1a; java.util.RandomAccess 接口&#xff…

Sui正式推出学术研究奖计划

欢迎研究人员和学者提交第一轮Sui学术研究奖的资金申请。 Sui基金会诚邀来自世界各地机构的研究人员和学者申请第一轮Sui学术研究奖。申请按提交顺序排序&#xff0c;每个季度公布一次。 跨学科研究对于深入理解Web3及其改变世界的潜力起着关键性的作用。Sui基金会推出的学术…

【定义函数与常用函数】------- PYTHON基础7

内容目录 一、 定义函数二、Python常用函数介绍min() ; max()sum() ; sum(x, start 0)type()str()sorted()help() 一、 定义函数 定义了一个计算三角形面积的函数,然后调用 def triangle_area(w, h):area w * h/2print(底边长为&#xff1a; , w, &#xff0c;高为&#xff…