Github代码仓库SSH配置流程

作者: Herman Ye @Auromix
测试环境: Ubuntu20.04
更新日期: 2024/02/21
注~1~: @Auromix 是一个机器人爱好者开源组织。
注~2~: 由于笔者水平有限,以下内容可能存在事实性错误。

相关背景

在为Github代码仓库配置SSH前,需要先了解一些基础的背景,如果这部分对你来说已经非常熟悉,可以跳过到下一步。

什么是SSH?

SSH(Secure Shell)协议是一种网络协议,用于在不安全的网络中提供安全的数据通信。它可以用于远程登录到计算机系统,也可以用于在两台计算机之间传输文件。SSH提供了强大的身份验证和安全的数据通信,可以防止密码、信息被拦截、篡改或者重放。

使用 SSH 密钥,您可以连接到 GitHub,而无需在每次访问时提供您的用户名和个人访问令牌。并且,您还可以使用 SSH 密钥来克隆/提交代码到Github。

通过SSH连接到Github需要什么操作?

设置 SSH 时,您需要生成新的 SSH 私钥并将其添加到 SSH 代理,方便SSH Agent对SSH秘钥的密码进行管理,同时,还需要将SSH 公钥添加到您在 GitHub 上的帐户。

SSH Agent是什么?

ssh-agent是一个帮助管理SSH私钥的程序,在用户生成 SSH 密钥时,可以添加密码以进一步保护密钥。 每当使用密钥时,都必须输入密码。 如果密钥具有密码并且你不想每次使用密钥时都输入密码,就需要用到SSH Agent。

当你启动ssh-agent后,你可以将你的私钥添加到ssh-agent中,然后ssh-agent会在需要时自动提供私钥,这样你就不需要每次使用SSH时都输入密码了。

完整流程

如果你需要使用SSH和Github服务器构建安全的连接,克隆或提交代码,请按照以下流程执行。

1.查看现有的SSH秘钥

bash 复制代码
ls -al ~/.ssh

如果发现名为id_rsa.pub, id_ecdsa.pub, id_ed25519.pub的公钥,

则可以跳过秘钥生成的步骤。

如果不存在~/.ssh目录或者没有对应的秘钥,则需要生成。

2.生成秘钥

通过ssh-keygen可以生成SSH密钥对,包含公钥和私钥:

  • 公钥(public key)

    可以公开给任何人,用于加密数据和验证签名。通常存放在远程服务器上。

  • 私钥(private key)

    必须严格保密,用于解密数据和创建数字签名。通常存放在本地计算机上。

SSH秘钥的主要用途是提供一种无密码登录远程服务器的方式。当你在远程服务器上安装了你的公钥后,你可以使用你的私钥来登录,而无需输入密码。这不仅方便,而且比使用密码更安全。

bash 复制代码
ssh-keygen -t ed25519 -C "youremail@icloud.com"

可以为SSH秘钥对指定保存秘钥的文件名、使用SSH秘钥的密码,因为这里指定了保存秘钥的文件名为id_ed25519_for_github,所以最终会在在目录下生成了私钥id_ed25519_for_github和公钥id_ed25519_for_github.pub

使用SSH秘钥的密码,通常为了方便不进行设置,如果确实设置了使用SSH秘钥的密码,则可以通过ssh-agent来帮助,方便在每次使用SSH秘钥时不用每次都输入密码

注意:如果你没有设置使用SSH秘钥的密码,则可以不执行以下两条命令

  • 启动SSH Agent
bash 复制代码
eval "$(ssh-agent -s)"
  • 添加私钥到SSH Agent
bash 复制代码
ssh-add ~/.ssh/id_ed25519_for_github

3.复制公钥

bash 复制代码
cat ~/.ssh/id_ed25519_for_github.pub

4. 在Github上添加公钥

在github的网页依次点击右上角头像->Settings->Access->SSH and GPG keys->New SSH key添加刚才复制的公钥,并给他一个用于提醒你的名称。

5.检查连接是否正常

最后,测试从主机到Github服务器的连接是否正常。

bash 复制代码
ssh -T git@github.com

如果正常,应当返回如下内容:

Hi Hermanye996! You've successfully authenticated, but GitHub does not

provide shell access.

如果设置了魔法代理,导致github的SSH端口无法访问,可以尝试执行以下脚本:

bash 复制代码
#!/bin/bash

# File: configure_ssh.sh
# Author: Herman Ye
# Date: 2023-11-03

# Set configuration parameters
host="github.com"
hostname="ssh.github.com"
port="443"

# Ensure the ~/.ssh directory exists
mkdir -p ~/.ssh

# Create or append the configuration to the ~/.ssh/config file
echo "Host $host" >> ~/.ssh/config
echo "Hostname $hostname" >> ~/.ssh/config
echo "Port $port" >> ~/.ssh/config

echo "Configuration has been written to the ~/.ssh/config file."

参考链接

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/managing-deploy-keys

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account

相关推荐
古驿幽情1 分钟前
CentOS AppStream 8 手动更新 yum源
linux·运维·centos·yum
BillKu2 分钟前
Linux(CentOS)安装 Nginx
linux·运维·nginx·centos
BillKu5 分钟前
Linux(CentOS)yum update -y 事故
linux·运维·centos
a2663789610 分钟前
解决yum命令报错“Could not resolve host: mirrorlist.centos.org
linux·运维·centos
上海文顺负载箱24 分钟前
如何评估焊机测试负载均衡性能
运维·负载均衡
油泼辣子多加1 小时前
2024年11月8日Github流行趋势
github
铁锤妹妹头发多1 小时前
新手用docker真**难受
运维·docker·容器
超栈1 小时前
HCIP(11)-期中综合实验(BGP、Peer、OSPF、VLAN、IP、Route-Policy)
运维·网络·网络协议·计算机网络·web安全·网络安全·信息与通信
Cachel wood1 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
编程一生2 小时前
回调数据丢了?
运维·服务器·前端