教程云原生【免费下载链接】learn-to-cloudA 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 个主题「SSHSecure 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、云 CLI2-cli.md与 Infrastructure as Code3-iac.md之后衔接第 5 主题 CLI 基础5-clibasics.md与第 6 主题 CTF 实验室6-ctf.md。它在阶段目标中扮演的角色是「构建并访问实验室环境」Phase 1 的 CTF 挑战要求学习者把实验室环境部署到云上而 SSH 正是进入这台机器的钥匙。文档原生的学习路径很清晰学概念理解什么是 SSH练实操在 AWS、Azure、GCP 三朵云上练习连接 Linux 实例过关清单能回答「SSH 是什么、为什么用它」「如何从终端 SSH 到 VM」「SSH 密钥为什么比密码更好」三个问题。本文即按这条路径展开并在每一节补充可落地的命令与仓库内的佐证资料。二、SSH 是什么为什么云工程师必须掌握SSHSecure Shell是一种加密的远程登录协议默认使用TCP 22 端口允许你在本地终端上安全地登录并操作一台远程计算机通常是 Linux/Unix 服务器或云端虚拟机。相比早期的明文远程协议如telnet、rloginSSH 的核心价值是加密传输用户名、密码、命令与输出全部在网络上加密防止中间人窃听身份认证通过密码或密钥对验证「你是谁」防止冒名登录完整性校验通信内容可校验、防篡改。SSH 并非只用于登录。在云工程日常工作中它几乎是所有远程操作的基础设施场景典型命令/工具登录远程虚拟机ssh userhost传输文件scp、sftp端口转发 / 加密隧道ssh -L、ssh -D、ssh -N安全 Git 传输Git over SSH如git clone githost:repo.git对云工程师而言SSH 是管理 EC2、虚机、容器节点等一切 Linux 计算资源的基本功——本主题也正是后续 Phase 3「安全远程访问」与 Phase 5「网络安全」的起点。三、动手前的环境准备在真正连接云端 VM 之前请先确认本地环境满足以下条件1. 本地已安装 SSH 客户端OpenSSHmacOS 与主流 Linux 发行版默认自带 OpenSSH可用以下命令验证ssh -V # 输出示例OpenSSH_9.x, OpenSSL 3.x.x ...如果你在 Windows 上请按 Phase 1 课程要求先配置WSLWindows Subsystem for Linux在 Ubuntu 环境内使用 SSH——课程文档明确指出所有实验室与工具都期望一个 Linux 环境参见 docs/phase1/README.md 的 Prerequisites 部分。2. 已创建云账号并安装云 CLISSH 连接需要一台已运行的目标虚拟机。若尚未完成请先参考 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 用户名直接指定登录用户也可用userhost写法首次连接会发生什么第一次连接新主机时SSH 会提示确认对方的 host key 指纹fingerprintThe authenticity of host ec2-3-xxx.compute.amazonaws.com (3.xxx) cant 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 EC2AWS 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 AzureAzure 创建 Linux 虚拟机时可在「身份验证类型」中选择SSH 公钥推荐或密码。创建时指定的用户名通常是azureuser。连接方式ssh azureuser公有IP若创建时上传了公钥本地需有对应私钥Azure 也支持在门户「连接」页直接生成包含-i参数的完整 SSH 命令若选择了密码认证首次连接会提示输入密码。4.3 GCPGCP Compute Engine 提供了最省事的方案——gcloudCLI 可以自动生成临时密钥并完成登录gcloud compute ssh 实例名 --zone可用区 # 示例 gcloud compute ssh my-instance --zoneus-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私钥本地身份凭证绝不出本地600chmod 600id_ed25519.pub公钥可上传到服务器authorized_keys644known_hosts记录已确认的服务器指纹自动维护authorized_keys服务器侧的公钥名单在远程机上600/644config为不同主机配置别名/密钥/用户可选6006.2 权限管理chmod 600OpenSSH 对密钥文件权限非常严格私钥如果被「其他人可读」会直接报错 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_keysssh-copy-id 用户名主机地址 # 输入一次密码后公钥即被安装此后可免密登录手动等价操作是cat ~/.ssh/id_ed25519.pub | ssh 用户名主机地址 mkdir -p ~/.ssh chmod 700 ~/.ssh cat ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys6.4 用 ssh-agent 管理密钥可选当本地有多把密钥、或私钥设置了 passphrase 时可将密钥加载进 ssh-agent避免每次连接重复输入eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed25519七、常见连接问题排查报错 / 现象原因处理Permission denied (publickey)私钥不对、用户名不对、公钥未部署核对-i路径与默认用户名检查远端authorized_keysUNPROTECTED PRIVATE KEY FILE私钥权限过宽chmod 600 ~/.ssh/id_ed25519Host key verification failed服务器指纹与known_hosts记录不一致可能换过实例确认是合法变更后移除旧记录ssh-keygen -R 主机地址连接超时安全组未放行 22 端口、或实例无公网 IP检查安全组/防火墙入站规则忘记用户名不同镜像默认用户不同Amazon Linux 为ec2-userUbuntu 为ubuntuDebian 为adminAzure 常为azureuser排障时给ssh加-v可叠加到-vvv能输出完整的握手与认证过程是定位问题的第一手段。八、从 SSH 到更安全的远程访问课程中的进阶掌握基础 SSH 后课程在Phase 3 第 4 主题「安全远程访问」中见 docs/phase3/4-secure-remote-access.md提出了一个重要观点在云环境中基于会话的访问管理正在替代「直接暴露 22 端口 SSH」的旧模式。三大云厂商的对应服务云厂商会话式访问服务核心思路AWSSystems Manager Session ManagerSSM无需公网 22 端口、无需 bastion通过 IAM 授权建立会话AzureAzure Bastion托管式跳板机基于 TLS 的 RDP/SSH 会话GCPIAPIdentity-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.mdLinux CLI 基础并进入 docs/phase1/6-ctf.md 的 CTF 实战在那里你将把这些 SSH 技巧用在真实的攻防挑战中。十、延伸阅读仓库内docs/phase1/4-ssh.md本主题英文原文档课程骨架docs/phase1/5-clibasics.mdChallenge 8「SSH Secrets」中的密钥管理命令与最佳实践docs/phase1/README.mdPhase 1 目标、前置条件与课程地图docs/phase3/1-virtual-machines-compute-services.md虚拟机与计算服务部署docs/phase3/4-secure-remote-access.mdSSM / Bastion / IAP 会话式安全远程访问docs/phase5/1-csf-iam-implementation.mdIAM 与最小权限实现赞分享教程云原生【免费下载链接】learn-to-cloudA 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点击查看免费下载相关推荐从零掌握 SSH用一条命令安全访问云虚拟机Learn to Cloud 实战指南从零掌握 SSH用一条命令安全访问云虚拟机Learn to Cloud 实战指南 本篇指南对应 Learn to Cloud 课程 Phase 1「Lin教程云原生Learn to Cloud 云 CLI 搭建指南三大云厂商命令行工具安装、配置与实战应用Learn to Cloud 云 CLI 搭建指南三大云厂商命令行工具安装、配置与实战应用 本篇指南基于 Learn to CloudL2C课程 Phas教程云原生Learn to Cloud 第五阶段实战为你的 Journal API 构建企业级云安全体系Learn to Cloud 第五阶段实战为你的 Journal API 构建企业级云安全体系 本文是 Learn to Cloud 课程 Phase 5S教程云原生上一篇终极指南如何在macOS上使用OpenMTP实现高速Android文件传输下一篇D2RML如何一键开启暗黑破坏神2重制版多账号游戏新时代创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考