SSH, GitHub

SSH 是什么?

SSH(Secure Shell,安全外壳协议) 是一种用于安全远程登录 和安全文件传输的网络协议。它加密所有通信,防止窃听和中间人攻击。

SSH 的核心概念:

1. 身份验证机制

SSH 使用两种主要的身份验证方式:

  • 密码认证:输入用户名和密码
  • 密钥认证:使用加密密钥对,这是你在课程中要做的

2. SSH 密钥对

每个 SSH 密钥由两部分组成:

  • 私钥(Private Key) :保存在你的电脑/容器中,绝不共享

  • 公钥(Public Key):可以安全地分享给任何人(如 GitHub)

    你的私钥(本地) ↔ 别人的公钥(远程)

在你的课程场景中:

当你执行"在 Docker 容器内创建 SSH 密钥,添加到 GitHub,然后克隆仓库"时:

步骤分解:

bash 复制代码
# 1. 在Docker容器中生成SSH密钥对
ssh-keygen -t ed25519 -C "your-email@example.com"
# 这会创建两个文件:
# - ~/.ssh/id_ed25519      (私钥,保密!)
# - ~/.ssh/id_ed25519.pub  (公钥,可公开)

# 2. 将公钥添加到GitHub账户
cat ~/.ssh/id_ed25519.pub
# 复制输出内容,粘贴到GitHub Settings → SSH and GPG keys

# 3. 克隆仓库使用SSH协议
git clone git@github.com:username/repository.git
# 而不是使用HTTPS:
# git clone https://github.com/username/repository.git

为什么用 SSH 而不是 HTTPS?

SSH 方式 HTTPS 方式
git@github.com:user/repo.git https://github.com/user/repo.git
使用密钥认证,无需每次输入密码 需要输入用户名/密码或使用token
更安全,适合自动化脚本 更方便,但密码可能被缓存
端口22,可能被防火墙阻挡 端口443,通常开放

SSH 的工作原理(类比):

想象你要进入一个高度安全的建筑:

密码方式(传统):

  1. 走到门口
  2. 输入用户名和密码
  3. 门卫检查密码是否正确
  4. 如果正确,让你进入

SSH密钥方式(现代):

  1. 你有一把特殊的私人钥匙(私钥)
  2. 建筑管理员有一把对应的公共锁(公钥)
  3. 你把私钥插入锁中
  4. 如果匹配,门自动打开
  5. 优势:即使有人偷看了锁(公钥),也无法复制你的私钥

在容器中使用 SSH 的特殊考虑:

bash 复制代码
# Docker 容器是临时的,所以:
# 1. 要么每次启动容器都重新生成密钥(不推荐)
# 2. 要么将 ~/.ssh 目录挂载到容器中(推荐)

# 推荐方法:挂载主机的SSH密钥到容器
docker run -v ~/.ssh:/root/.ssh:ro your-image
# :ro 表示只读,防止容器修改你的私钥

实际命令示例:

bash 复制代码
# 在Docker容器内:
# 1. 生成SSH密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 直接按回车接受默认位置和空密码

# 2. 启动SSH代理
eval "$(ssh-agent -s)"

# 3. 将私钥添加到代理
ssh-add ~/.ssh/id_rsa

# 4. 查看公钥并复制
cat ~/.ssh/id_rsa.pub

# 5. 添加到GitHub后测试连接
ssh -T git@github.com
# 应该看到:Hi username! You've successfully authenticated...

# 6. 克隆仓库
git clone git@github.com:username/repo-name.git

安全提醒:

  1. 私钥如同密码 :永远不要分享 id_rsa 文件
  2. 公钥可以公开 :id_rsa.pub 文件可以安全地给任何人
  3. 容器是临时的:如果容器被删除,里面的密钥也会丢失
  4. 考虑密钥管理:对于生产环境,使用专门的密钥管理工具

总结:

SSH 是一种安全的通信协议 ,而 SSH 密钥是一种更安全、更方便的身份验证方式,特别适合:

  • 自动化脚本(无需人工输入密码)
  • 持续集成/持续部署(CI/CD)
  • 服务器管理
  • GitHub/GitLab 等代码托管平台的认证

在你的课程练习中,使用 SSH 密钥可以让 Docker 容器安全地访问你的 GitHub 仓库,而不需要每次输入密码或 token。

相关推荐
CANI_PLUS7 分钟前
电脑文件共享
运维·服务器
Decay__25 分钟前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
Linux界最忧郁之人28 分钟前
华为云ECS&IMS&AS实战|弹性云服务器、私有镜像、弹性伸缩完整实验
linux·运维·服务器·centos·华为云·openstack
后台模板学习1 小时前
GitHub Actions 与 Jenkins 在日志监
运维·github·jenkins
miofly1 小时前
GitHub 今日推荐|auto-ontology:给 Agent 装上企业数据的语义索引
python·开源·github
whyutianict_vv1 小时前
零基础转 AI 运维:投入清单、技术路线与核对表
linux·运维·人工智能·ai
杨云龙UP2 小时前
Oracle 同义词(SYNONYM)详解及 Toad for Oracle SQL 智能补全配置实战
运维·数据库·sql·oracle·同义词·toad·toad for oracle
晨陌y2 小时前
Flare自托管导航页教程:Docker部署、多用户、API与公网访问
运维·docker·容器
Android系统攻城狮2 小时前
Linux FFmpeg深度解析之avcodec_parameters_copy调用流程与实战(二十五)
linux·运维·服务器·ffmpeg·音视频·车载音频
cakeism8252 小时前
2026 中国企业 DevOps 平台选型:从工具链到一体化平台的决策框架
运维·servlet·devops