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

目录
相关文章
|
3月前
|
开发工具 git 开发者
2024最简七步完成 将本地项目提交到github仓库方法
该文章提供了一个简洁的七步教程,指导用户如何将本地项目提交到GitHub仓库。
2024最简七步完成 将本地项目提交到github仓库方法
|
26天前
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
1月前
|
JavaScript Linux Windows
Typora图床配置(用自带的 PicGo-Core(command line) 插件GitHub
Typora图床配置(用自带的 PicGo-Core(command line) 插件GitHub
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是由 GitHub 提供的自动化工具,可让你在仓库中触发和执行自动化工作流程,如自动运行测试和部署应用。其核心概念包括工作流程(定义在 YAML 文件中的一系列自动化步骤)、作业和步骤。本文将指导你如何设置和使用 GitHub Actions,并提供实用的自动化示例,帮助你提高开发效率和代码质量。通过简单的配置文件,你可以实现自动运行测试、部署应用甚至自动合并 Pull Requests。
利用 GitHub Actions 自动化你的软件开发流程
在现代软件开发中,自动化是提升效率与质量的关键。GitHub Actions 作为 GitHub 的强大自动化工具,允许你在仓库中自动执行多种任务,如测试、打包、部署代码及自动合并 Pull Requests。本文介绍了 GitHub Actions 的核心概念、设置方法及其实用示例,帮助你快速上手并优化开发流程。通过 YAML 文件定义的工作流程可显著提高工作效率和代码质量。
|
1月前
|
安全 Shell 网络安全
设置 码云 SSH 推送和拉取代码
设置 码云 SSH 推送和拉取代码
75 0
|
2月前
|
开发者
利用 GitHub Actions 自动化你的软件开发流程
在快速发展的软件开发环境中,自动化对于提升效率与质量至关重要。GitHub Actions 作为一款强大的工具,能帮助开发者实现从自动运行测试到部署应用等工作的自动化。本文详细介绍了 GitHub Actions 的核心概念、设置方法及实际应用示例,如自动测试、部署和合并 Pull Requests,助力提升开发流程的自动化水平。
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是 GitHub 提供的自动化工具,可在仓库中触发和执行工作流程,包括自动运行测试、部署应用等。其核心概念包括工作流程(Workflow)、作业(Job)和步骤(Step),均定义在 YAML 文件中。本文将指导你如何设置和使用 GitHub Actions,并提供自动运行测试、部署应用及合并 Pull Requests 的示例,帮助提高开发效率和代码质量。
|
3月前
|
人工智能 算法 机器人
Github上5个实用的ChatGPT仓库
Github上5个实用的ChatGPT仓库
|
3月前
|
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