news 2026/10/12 2:05:01

Learn to Cloud 阶段一:SSH 安全远程接入云端虚拟机——从密钥原理到三大云厂商实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Learn to Cloud 阶段一:SSH 安全远程接入云端虚拟机——从密钥原理到三大云厂商实操
  • 教程
  • 云原生

【免费下载链接】learn-to-cloud

A courseware built on the belief that anyone can learn foundational cloud engineering skills with the right guide and discipline

项目地址:https://gitcode.com/gh_mirrors/le/learn-to-cloud
点击查看免费下载

本篇指南围绕 Learn to Cloud 课程 Phase 1 的第 4 个主题「SSH(Secure Shell 与远程访问)」展开,帮助学习者理解 SSH 是什么、为什么云工程师离不开它,并完成「从本地终端 SSH 到云端虚拟机」的首次实操。读完本文,你将掌握 SSH 的基本原理、密钥对(key pair)的生成与管理、在 AWS / Azure / GCP 上连接虚拟机的具体命令,以及从密码认证迁移到密钥认证的安全实践。


一、这个主题在课程中的位置

本主题对应的原始文档是 docs/phase1/4-ssh.md(另有西语译本 i18n/es/docusaurus-plugin-content-docs/current/phase1/4-ssh.md),课程规划预估用时为1 天。

在 docs/phase1/README.md 的课程地图中,SSH 是 Phase 1「Linux and Bash」的第 4 个主题,紧随 Git/版本控制(1-versioncontrol.md)、云 CLI(2-cli.md)与 Infrastructure as Code(3-iac.md)之后,衔接第 5 主题 CLI 基础(5-clibasics.md)与第 6 主题 CTF 实验室(6-ctf.md)。

它在阶段目标中扮演的角色是「构建并访问实验室环境」:Phase 1 的 CTF 挑战要求学习者把实验室环境部署到云上,而 SSH 正是进入这台机器的钥匙。文档原生的学习路径很清晰:

  1. 学概念:理解什么是 SSH;
  2. 练实操:在 AWS、Azure、GCP 三朵云上练习连接 Linux 实例;
  3. 过关清单:能回答「SSH 是什么、为什么用它」「如何从终端 SSH 到 VM」「SSH 密钥为什么比密码更好」三个问题。

本文即按这条路径展开,并在每一节补充可落地的命令与仓库内的佐证资料。


二、SSH 是什么:为什么云工程师必须掌握

SSH(Secure Shell)是一种加密的远程登录协议,默认使用TCP 22 端口,允许你在本地终端上安全地登录并操作一台远程计算机(通常是 Linux/Unix 服务器或云端虚拟机)。

相比早期的明文远程协议(如telnet、rlogin),SSH 的核心价值是:

  • 加密传输:用户名、密码、命令与输出全部在网络上加密,防止中间人窃听;
  • 身份认证:通过密码或密钥对验证「你是谁」,防止冒名登录;
  • 完整性校验:通信内容可校验、防篡改。

SSH 并非只用于登录。在云工程日常工作中,它几乎是所有远程操作的基础设施:

场景典型命令/工具
登录远程虚拟机ssh user@host
传输文件scp、sftp
端口转发 / 加密隧道ssh -L、ssh -D、ssh -N
安全 Git 传输Git over SSH(如git clone git@host:repo.git)

对云工程师而言,SSH 是管理 EC2、虚机、容器节点等一切 Linux 计算资源的基本功——本主题也正是后续 Phase 3「安全远程访问」与 Phase 5「网络安全」的起点。


三、动手前的环境准备

在真正连接云端 VM 之前,请先确认本地环境满足以下条件:

1. 本地已安装 SSH 客户端(OpenSSH)

macOS 与主流 Linux 发行版默认自带 OpenSSH,可用以下命令验证:

ssh -V # 输出示例:OpenSSH_9.x, OpenSSL 3.x.x ...

如果你在 Windows 上,请按 Phase 1 课程要求先配置WSL(Windows Subsystem for Linux),在 Ubuntu 环境内使用 SSH——课程文档明确指出,所有实验室与工具都期望一个 Linux 环境(参见 docs/phase1/README.md 的 Prerequisites 部分)。

2. 已创建云账号并安装云 CLI

SSH 连接需要一台已运行的目标虚拟机。若尚未完成,请先参考 docs/phase1/2-cli.md 完成 AWS / Azure / GCP 账号创建与 CLI 安装,再参考 docs/phase3/1-virtual-machines-compute-services.md 部署一台 Linux 虚拟机(推荐 Ubuntu 或 Amazon Linux)。

3. 放行 22 端口

多数云平台的安全组(Security Group)/ 网络安全组(NSG)/ VPC 防火墙规则默认允许 22 端口入站,但请务必确认,否则连接会直接超时。


四、核心实操:从本地终端 SSH 到云端虚拟机

SSH 连接的基本语法是:

ssh [选项] 用户名@主机地址

常用选项:

选项含义
-i 私钥路径指定用于认证的私钥文件(如-i ~/.ssh/my-key.pem)
-p 端口指定端口(默认 22,当服务器改端口时使用)
-v输出详细调试信息,排障利器
-l 用户名直接指定登录用户(也可用user@host写法)

首次连接会发生什么?

第一次连接新主机时,SSH 会提示确认对方的 host key 指纹(fingerprint):

The authenticity of host 'ec2-3-xxx.compute.amazonaws.com (3.xxx)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxx... Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入yes后,该主机的指纹会被记录到本地~/.ssh/known_hosts,此后连接不再重复询问。确认指纹来自可信来源是防止中间人攻击的关键步骤——云厂商控制台通常能查到实例的指纹,可交叉核对。

4.1 AWS EC2

AWS EC2 在创建实例时即要求绑定密钥对(key pair),公钥写入实例,私钥.pem由你下载保存。默认用户名取决于 AMI:

# Amazon Linux 2 / 2023 镜像 ssh -i ~/.ssh/my-key.pem ec2-user@<公有IP或公有DNS> # Ubuntu 镜像 ssh -i ~/.ssh/my-key.pem ubuntu@<公有IP或公有DNS>

注意:私钥文件权限过宽会被 OpenSSH 直接拒绝(见下文「权限管理」),AWS 官方要求.pem权限至少为chmod 400。

4.2 Azure

Azure 创建 Linux 虚拟机时,可在「身份验证类型」中选择SSH 公钥(推荐)或密码。创建时指定的用户名通常是azureuser。连接方式:

ssh azureuser@<公有IP>

若创建时上传了公钥,本地需有对应私钥(Azure 也支持在门户「连接」页直接生成包含-i参数的完整 SSH 命令);若选择了密码认证,首次连接会提示输入密码。

4.3 GCP

GCP Compute Engine 提供了最省事的方案——gcloudCLI 可以自动生成临时密钥并完成登录:

gcloud compute ssh <实例名> --zone=<可用区> # 示例 gcloud compute ssh my-instance --zone=us-central1-a

首次执行时gcloud会生成/上传 SSH 密钥并询问你是否设置本地 passphrase;它还会自动把结果写入~/.ssh/。若想手动指定用户,可追加--参数或使用标准ssh 用户名@外部IP。

4.4 退出会话

exit # 或 Ctrl + D

五、SSH 密钥 vs 密码:为什么密钥更安全

这是原文档清单中的核心问题:「我理解 SSH 密钥,并且知道为什么它们比密码更好」。答案要从认证机制说起。

密码认证的弱点:

  • 弱口令与复用:暴力破解(brute force)工具可以批量尝试常见密码,公网实例在数小时内就会收到大量扫描尝试;
  • 密码在网络上传输时虽有加密,但服务器侧一旦被攻破,密码可能被窃取;
  • 密码无法做到「一次一密」,也难以精细吊销。

密钥认证的原理:

SSH 密钥对由非对称加密生成:

  • 私钥(private key):留存在本地,相当于你的「身份凭证」,绝不能泄露;
  • 公钥(public key):上传并追加到服务器的~/.ssh/authorized_keys文件,相当于「门禁名单」。

登录时,客户端用私钥对挑战数据签名,服务器用authorized_keys中的公钥验签。由于公钥和私钥在数学上配对,服务器能确认「持有私钥的人」就是被授权者。密钥长度动辄 256 位(ED25519)或 4096 位(RSA),暴力破解在计算上不可行,因此远比密码抗攻击。

核心安全习惯:私钥永不离开本地、永不提交到 Git 仓库、永不上传服务器;而公钥可以公开分发。课程在 CTF 挑战中专门强调「保持你的私钥安全、确保正确的文件权限」(见 docs/phase1/5-clibasics.md 的 Challenge 8「SSH Secrets」)。


六、生成与管理密钥对:ssh-keygen 实战

6.1 生成密钥对

现代 OpenSSH 推荐使用ED25519算法:

ssh-keygen -t ed25519 -C "你的邮箱或注释"

如需兼容旧系统,可用 RSA 4096 位:

ssh-keygen -t rsa -b 4096 -C "你的邮箱或注释"

交互过程中可设置passphrase(私钥口令),即使私钥文件被盗也无法直接使用;-C注释建议写邮箱,便于在服务器authorized_keys中区分多把钥匙。

生成后~/.ssh/目录下会出现两个文件:

文件角色建议权限
id_ed25519(私钥)本地身份凭证,绝不出本地600(chmod 600)
id_ed25519.pub(公钥)可上传到服务器authorized_keys644
known_hosts记录已确认的服务器指纹自动维护
authorized_keys服务器侧的公钥名单(在远程机上)600/644
config为不同主机配置别名/密钥/用户(可选)600

6.2 权限管理:chmod 600

OpenSSH 对密钥文件权限非常严格,私钥如果被「其他人可读」,会直接报错:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'id_ed25519' are too open.

因此对私钥执行:

chmod 600 ~/.ssh/id_ed25519 # 私钥仅本人可读写 chmod 700 ~/.ssh # 目录仅本人可访问

这正是课程 Challenge 8 中chmod 600命令的用意(见 docs/phase1/5-clibasics.md)。在 CTF 与真实渗透场景中,~/.ssh/目录也常是侦察重点:用ls -la ~/.ssh/列出内容、用find ~/.ssh -type f找出所有密钥文件、用cat authorized_keys审查有哪些公钥被授权——这些命令在本主题清单对应的「CLI 基础」主题中都有讲解。

6.3 把公钥部署到服务器:ssh-copy-id

若目标服务器支持密码首次登录,一条命令即可把本地公钥追加到远端authorized_keys:

ssh-copy-id 用户名@主机地址 # 输入一次密码后,公钥即被安装,此后可免密登录

手动等价操作是:

cat ~/.ssh/id_ed25519.pub | ssh 用户名@主机地址 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

6.4 用 ssh-agent 管理密钥(可选)

当本地有多把密钥、或私钥设置了 passphrase 时,可将密钥加载进 ssh-agent,避免每次连接重复输入:

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

七、常见连接问题排查

报错 / 现象原因处理
Permission denied (publickey)私钥不对、用户名不对、公钥未部署核对-i路径与默认用户名;检查远端authorized_keys
UNPROTECTED PRIVATE KEY FILE私钥权限过宽chmod 600 ~/.ssh/id_ed25519
Host key verification failed服务器指纹与known_hosts记录不一致(可能换过实例)确认是合法变更后移除旧记录:ssh-keygen -R 主机地址
连接超时安全组未放行 22 端口、或实例无公网 IP检查安全组/防火墙入站规则
忘记用户名不同镜像默认用户不同Amazon Linux 为ec2-user,Ubuntu 为ubuntu,Debian 为admin,Azure 常为azureuser

排障时给ssh加-v(可叠加到-vvv)能输出完整的握手与认证过程,是定位问题的第一手段。


八、从 SSH 到更安全的远程访问:课程中的进阶

掌握基础 SSH 后,课程在Phase 3 第 4 主题「安全远程访问」中(见 docs/phase3/4-secure-remote-access.md)提出了一个重要观点:在云环境中,基于会话的访问管理正在替代「直接暴露 22 端口 + SSH」的旧模式。

三大云厂商的对应服务:

云厂商会话式访问服务核心思路
AWSSystems Manager Session Manager(SSM)无需公网 22 端口、无需 bastion,通过 IAM 授权建立会话
AzureAzure Bastion托管式跳板机,基于 TLS 的 RDP/SSH 会话
GCPIAP(Identity-Aware Proxy)基于身份与上下文策略的 TCP 转发

这类方案的优势包括:实例可以不暴露公网 SSH 端口、访问控制收敛到 IAM 策略、会话可审计可录制。课程对应的实操任务要求你配置会话式访问,并用 IAM 策略落实**最小权限(least privilege)**原则——这与 docs/phase5/1-csf-iam-implementation.md 的 IAM 主题一脉相承。

而在本阶段,你只需要先把「理解 SSH、会用密钥登录 VM」这件事做扎实,因为它是后续理解这些托管方案为什么更安全的底层知识。


九、主题完成清单(Checklist)

原文档给出的过关标准如下,请在继续下一主题前逐条自检:

  • 我理解 SSH 是什么以及为什么使用它——能用一句话向别人解释 Secure Shell 的加密、认证与端口 22;
  • 我知道如何从本地终端 SSH 到虚拟机——能在 AWS / Azure / GCP 上完成一次真实登录、执行命令并退出;
  • 我理解 SSH 密钥并且知道为什么它们比密码更好——能说明公钥/私钥配对原理,会使用ssh-keygen生成密钥并正确设置chmod 600权限。

若三项都打上了勾,说明你已经具备云工程师最基础也最常用的远程访问能力,可以继续学习 docs/phase1/5-clibasics.md(Linux CLI 基础)并进入 docs/phase1/6-ctf.md 的 CTF 实战,在那里你将把这些 SSH 技巧用在真实的攻防挑战中。


十、延伸阅读(仓库内)

  • docs/phase1/4-ssh.md:本主题英文原文档(课程骨架)
  • docs/phase1/5-clibasics.md:Challenge 8「SSH Secrets」中的密钥管理命令与最佳实践
  • docs/phase1/README.md:Phase 1 目标、前置条件与课程地图
  • docs/phase3/1-virtual-machines-compute-services.md:虚拟机与计算服务部署
  • docs/phase3/4-secure-remote-access.md:SSM / Bastion / IAP 会话式安全远程访问
  • docs/phase5/1-csf-iam-implementation.md:IAM 与最小权限实现
  • 教程
  • 云原生

【免费下载链接】learn-to-cloud

A courseware built on the belief that anyone can learn foundational cloud engineering skills with the right guide and discipline

项目地址:https://gitcode.com/gh_mirrors/le/learn-to-cloud
点击查看免费下载
上一篇:终极指南:如何在macOS上使用OpenMTP实现高速Android文件传输
下一篇:D2RML:如何一键开启暗黑破坏神2重制版多账号游戏新时代?

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 2:03:34

摄影测量三大核心:后方交会、相对定向与光束法平差实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 2:02:58

Langchain01_框架之模型的创建与调用

模型创建3种方式 1.使用特定的Model Class&#xff08;最直接&#xff0c;但不好用&#xff09; LangChain为一些大模型供应商提供了专门的Model类&#xff0c;导入对应的具体类&#xff08;如 ChatOpenAI、ChatAnthropic、ChatDeepSeek、ChatOllama、ChatHunyuan、ChatTongy…

作者头像 李华
网站建设 2026/10/12 2:00:42

PyQt5嵌入matplotlib实现三维曲面图:从环境搭建到交互优化全指南

简介&#xff1a;一份基于Python PyQt5的三维曲面图绘制项目源码&#xff0c;面向从事科学可视化或桌面GUI开发的Python工程师&#xff0c;解决在PyQt5应用中集成三维渲染与用户交互的核心问题。压缩包共36个文件&#xff0c;包含4个Python脚本、2个UI界面文件、2组C头文件与实…

作者头像 李华
网站建设 2026/10/12 1:58:51

P2PKH 交易详解:比特币公钥哈希支付的技术原理与实战

示例工程区块链 【免费下载链接】Dapp-Learning Dapp learning project for developers at all stages. Becoming and cultivating sovereign individuals. Nonprofit organization. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/da/Dapp-Learning 点击查看 免费下载 …

作者头像 李华