GitHub 配置 ssh key 的步骤及原理解释

原文:Github 配置 ssh key 的步骤(大白话+包含原理解释)

本文涉及 SSH 相关知识,建议先阅读 SSH 原理与运用(一):远程登录 或者将其作为扩展资料。

前言

在 GitHub 上配置 ssh key 很容易,网上一大堆教程,但基本没有详细解释其原理的,为什么要配?每使用一台主机都要配?配了为什么就不用密码了?下面将简单通俗地解释一下。

我们在往 GitHub 上 push 项目的时候,如果走 https 的方式,每次都需要输入账号密码,非常麻烦。而采用 ssh 的方式,就不再需要输入,只需要在 GitHub 自己账号下配置一个 ssh key 即可。

配置 SSH

git 使用 SSH 配置,初始需要以下三个步骤:

  1. 使用秘钥生成工具生成 rsa 秘钥和公钥
  2. 将 rsa 公钥添加到代码托管平台
  3. 将 rsa 秘钥添加到 ssh-agent 中,为 ssh client 指定使用的秘钥文件

具体操作如下。

第一步:检查本地主机是否已经存在 ssh key
cd ~/.ssh
ls
// 看是否存在 id_rsa 和 id_rsa.pub 文件,如果存在,说明已经有 SSH Key

如下图所示,则表明已经存在:

在这里插入图片描述

如果存在,直接跳到第三步。

第二步:生成 ssh key

如果不存在 ssh key,使用如下命令生成:

ssh-keygen -t rsa -C "xxx@xxx.com"

生成完以后再用第二步命令,查看 ssh key。

第三步:获取 ssh key 公钥内容(id_rsa.pub)
cd ~/.ssh
cat id_rsa.pub

如下图所示,复制该内容:

在这里插入图片描述
第四步:Github 账号上添加公钥

进入 Settings 设置:

在这里插入图片描述

添加 ssh key,把刚才复制的内容粘贴上去保存即可:

在这里插入图片描述
第五步:验证是否设置成功
ssh -T git@github.com

显示如下信息表明设置成功:

在这里插入图片描述

设置成功后,即可不需要账号密码 clone 和 push 代码。

注意之后在 clone 仓库的时候要使用 ssh 的 url,而不是 https!

验证原理

SSH 登录安全性由非对称加密保证,产生密钥时,一次产生两个密钥,一个公钥,一个私钥,在 git 中一般命名为 id_rsa.pub、id_rsa。

那么如何使用生成的一个私钥一个公钥进行验证呢?

  • 本地生成一个密钥对,其中公钥放到远程主机,私钥保存在本地。
  • 当本地主机需要登录远程主机时,本地主机向远程主机发送一个登录请求,远程收到消息后,随机生成一个字符串并用公钥加密,发回给本地。本地拿到该字符串,用存放在本地的私钥进行解密,再次发送到远程,远程比对该解密后的字符串与源字符串是否等同,如果等同则认证成功。

解释

从上面可以知道:ssh key 的配置是针对每台主机的!比如我在某台主机上操作 git 和我的远程仓库,想要 push 时不输入账号密码,走 ssh 协议,就需要配置 ssh key,放上去的 key 是当前主机的 ssh 公钥。那么如果我换了一台其他主机,想要实现无密登录,也就需要重新配置。

下面解释开头提出的问题:

(1)为什么要配?

配了才能实现 push 代码的时候不需要反复输入自己的 GitHub 账号密码,更方便。

(2)每使用一台主机都要配?

是的,每使用一台新主机进行 git 远程操作,想要实现无密,都需要配置。并不是说每个账号配一次就够了,而是每一台主机都需要配。

(3)配了为什么就不用密码了?

因为配置的时候是把当前主机的公钥放到了你的 GitHub 账号下,相当于当前主机和你的账号做了一个关联,你在这台主机上已经登录了你的账号,此时此刻 GitHub 认为是该账号主人在操作这台主机,在配置 ssh 后就信任该主机了。所以下次在使用 git 的时候即使没有登录 GitHub,也能直接从本地 push 代码到远程了。当然这里不要混淆了,你不能随意 push 你的代码到任何仓库,你只能 push 到你自己的仓库或者其他你有权限的仓库!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪吃蛇作业

贪吃蛇界面: 代码:import pygame import random import sys import tkinter as tk from tkinter import messagebox # 初始化pygame pygame.init() # 设置屏幕大小 screen_width = 640 screen_height = 480 screen = pygame.display.set_mode((screen_widt…

数据集的收集

我在这里找到了一个数据集的网站:https://www.kaggle.com/datasets 我这里找到了三个小数据集为例子分别如下: 我写的数据分析如下: 1.数据集名称房价回归数据集来源 https://www.kaggle.com/datasets/prokshitha/home-value-insights?resource=download数据集描述该数据集…

数字签名是什么?

原文:数字签名是什么?文中涉及的密码学基本知识,可以参见对称加密和非对称加密的区别。鲍勃有两把钥匙,一把是公钥,另一把是私钥。鲍勃把公钥送给他的朋友们——帕蒂、道格、苏珊——每人一把。苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效…

存储论——确定性存储模型模型精解

运筹学中的存储问题主要研究如何通过优化库存管理,确保在满足需求的同时,尽可能降低与库存相关的成本。这一问题在生产制造、物流运输、仓储等各个领域具有重要应用。核心目标是通过合理规划进货、存货和出货策略,实现成本最小化和资源的高效利用。在实际应用中,由于需求的…

软工实践第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253这个作业的目标 了解小型项目的设计学号 082100170github:完成情况因为对游戏设计没有多大兴趣,所以只是简单地完成了基本的消…

[MySQL]深分页优化

limit深分页为什么会变慢? 先看下表结构: CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键Id,name varchar(255) DEFAULT NULL COMMENT 账户名,balance int(11) DEFAULT NULL COMMENT 余额,create_time datetime NOT NULL COMMENT 创建时间,update_t…

后台地址改了,忘记了,去哪个文件能查看啊

如果您忘记了EyouCMS后台地址,并且知道后台地址曾经被修改过,可以通过查找相关配置文件来确定后台地址。以下是查找EyouCMS后台地址的一般步骤: 查找EyouCMS后台地址查找登录入口文件:EyouCMS后台登录页面通常是在网站根目录下的某个文件,例如 admin.php 或 login.php。您…

如何查杀空间木马

查杀空间木马通常指的是检测和清除托管在Web服务器上的恶意代码或木马程序。这些木马可能是通过漏洞入侵您的网站或服务器后留下的。以下是一些查杀空间木马的基本步骤: 1. 使用安全软件进行扫描安装安全软件:可以使用如360安全卫士等安全软件来进行木马查杀。如果您的服务器…

后台登陆验证码怎么关闭

关闭后台登录验证码的方法因所使用的CMS系统不同而有所差异。以下是针对几个不同版本的织梦CMS(DedeCms)关闭后台登录验证码的方法: 织梦CMS 5.5 版本打开织梦CMS根目录下的 dede 文件夹。 找到 login.php 文件,并用文本编辑器打开。 查找以下代码:phpif($validate== || $…

开源项目dotnet/eshop 和 dotnet/eshopsupport

dotnet/eshop[1] 和 dotnet/eshopsupport[2] 是两个与 .NET 相关的开源项目,分别用于展示电子商务应用的不同方面。dotnet/eshop:功能与架构:dotnet/eshop 是一个基于 .NET Aspire 的参考电商应用,展示了服务架构在构建现代在线购物平台中的应用。项目涵盖产品目录、购物车和…

忘记eyoucms后台密码怎么办?

如果您忘记了EyouCMS后台的密码,可以通过以下几种方法来重置或恢复密码:使用官方提供的重置工具:官方提供了专门用于重置密码的工具 setpwd.php。您需要下载该文件,并将其上传到网站的根目录下。 访问 http://yousite.com/setpwd.php(将 yousite.com 替换为您自己的域名)…

能否判断自定义变量是否为空?

不同的编程语言有不同的方式来判断一个变量是否为空。下面列出了一些常见编程语言中判断变量是否为空的方法: 1. Java 在Java中,你可以使用多种方法来判断一个变量是否为空:对于对象:检查是否为 null。javaif (object == null) {System.out.println("变量为空");…