Github代码仓库SSH配置流程

简介: 这篇文章是关于如何配置SSH以安全地连接到GitHub代码仓库的详细指南,包括使用一键脚本简化配置过程、生成SSH密钥对、添加密钥到SSH代理、将公钥添加到GitHub账户以及测试SSH连接的步骤。

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

一键配置SSH脚本

Auromix提供了一键配置SSH到github的脚本,你可以在ros-install-one-click项目里找到更多便捷的脚本:

script_name="config_ssh.sh" && directory_name="/tmp" && full_script_path="${directory_name}/${script_name}" && wget -O $full_script_path https://raw.githubusercontent.com/auromix/ros-install-one-click/main/$script_name && sudo chmod +x $full_script_path && bash $full_script_path && rm -rf $full_script_path

相关背景

在为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秘钥

ls -al ~/.ssh

如果发现名为id_rsa.pub, id_ecdsa.pub, id_ed25519.pub的公钥,
则可以跳过秘钥生成的步骤。
如果不存在~/.ssh目录或者没有对应的秘钥,则需要生成。

2.生成秘钥

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

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

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

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

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
eval "$(ssh-agent -s)"
  • 添加私钥到SSH Agent
ssh-add ~/.ssh/id_ed25519_for_github

3.复制公钥

cat ~/.ssh/id_ed25519_for_github.pub

4. 在Github上添加公钥

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

5.检查连接是否正常

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

ssh -T git@github.com

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

Hi Hermanye996! You’ve successfully authenticated, but GitHub does not
provide shell access.

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

#!/bin/bash

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

# Set configuration parameters
github_host="github.com"
github_hostname="ssh.github.com"
github_port="443"

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

# Check if the configuration already exists in the ~/.ssh/config file
if ! grep -q "Host $github_host" ~/.ssh/config; then
    # Create or append the configuration to the ~/.ssh/config file
    echo "Host $github_host" >> ~/.ssh/config
    echo "Hostname $github_hostname" >> ~/.ssh/config
    echo "Port $github_port" >> ~/.ssh/config
    echo "" >> ~/.ssh/config
    echo "Configuration added to the ~/.ssh/config file."
else
    echo "Configuration already exists in the ~/.ssh/config file. Skipping."
fi

参考链接

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

目录
相关文章
|
16天前
|
开发工具 git 开发者
2024最简七步完成 将本地项目提交到github仓库方法
该文章提供了一个简洁的七步教程,指导用户如何将本地项目提交到GitHub仓库。
2024最简七步完成 将本地项目提交到github仓库方法
|
3天前
|
开发者
利用 GitHub Actions 自动化你的软件开发流程
在快速发展的软件开发环境中,自动化对于提升效率与质量至关重要。GitHub Actions 作为一款强大的工具,能帮助开发者实现从自动运行测试到部署应用等工作的自动化。本文详细介绍了 GitHub Actions 的核心概念、设置方法及实际应用示例,如自动测试、部署和合并 Pull Requests,助力提升开发流程的自动化水平。
|
24天前
|
网络协议 Shell 网络安全
开发工具使用之 github 私人仓库Clone 失败的问题
这篇文章介绍了解决GitHub上私人仓库克隆失败的问题,通过检查本地SSH key的存在与否、生成新的SSH key、添加SSH key到GitHub以及使用SSH方式克隆私有仓库的步骤来解决这个问题。
开发工具使用之 github 私人仓库Clone 失败的问题
|
16天前
|
人工智能 算法 机器人
Github上5个实用的ChatGPT仓库
Github上5个实用的ChatGPT仓库
|
20天前
|
Linux C++ Docker
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
|
26天前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之从GitHub下载代码失败是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
API 索引
开发一个简单的工具,导出github仓库所有issue列表
开发一个简单的工具,导出github仓库所有issue列表
350 0
开发一个简单的工具,导出github仓库所有issue列表
开发一个简单的工具,导出github仓库所有issue列表
Jerry有一个github仓库,专门用来存放自己的知识管理,通过一条条的issue来记录具体的知识点:https://github.com/i042416/KnowlegeRepository/issues目前已经积累了超过2000条记录了。
|
15天前
|
SQL JavaScript 前端开发
Github 2024-08-05 开源项目周报 Top15
根据 Github Trendings 的统计,本周(2024年8月5日统计)共有15个项目上榜。以下是根据开发语言汇总的项目数量: - Go 项目:4个 - JavaScript 项目:3个 - Python 项目:3个 - Java 项目:2个 - TypeScript 项目:2个 - C 项目:1个 - Shell 项目:1个 - Dockerfile 项目:1个 - 非开发语言项目:1个
22 2
|
15天前
|
人工智能 Rust JavaScript
Github 2024-08-26 开源项目周报Top15
根据Github Trendings的统计,本周共有15个项目上榜。以下是按开发语言汇总的项目数量:Python项目8个,TypeScript、C++ 和 Rust 项目各2个,Jupyter Notebook、Shell、Swift 和 Dart 项目各1个。其中,RustDesk 是一款用 Rust 编写的开源远程桌面软件,可作为 TeamViewer 的替代品;Whisper 是一个通用的语音识别模型,基于大规模音频数据集训练而成;初学者的生成式人工智能(第2版)则是由微软提供的18门课程,教授构建生成式AI应用所需的知识。
49 1