Linux:虚拟机 Ubuntu + SSH
装好 Ubuntu 虚拟机并支持 SSH 免密登录,为 Linux 学习提供主力环境
- 来源
- 更新
标记说明:【来源】来自上传资料 · 【补充】课程新编 · 【纠错】按勘误表修正 · 【更新】过时内容已现代化 · 【待确认】无法可靠还原
本章含平台相关内容(platform_scope: distribution-specific)
以下【平台示例】仅为演示载体,不构成本课程依赖;不同架构/SoC/板卡/发行版的区别见【平台差异】标注,换平台时请完成文末「迁移训练」。
完成标准(本章)
- 📖 已阅读:滚动 ≥ 80% 且有效阅读 ≥ 150 秒
- ✏️ 已练习:小练习正确率 ≥ 60%
- 📝 已通过测验:分数 ≥ 60 分
- 🛠️ 已掌握还需完成实践任务
0.2.2 Linux:虚拟机 Ubuntu + SSH
本章来源:VMware 网络与 SSH 流程来自《Linux IO》PAGE 1-10【来源】;系统版本要求已【更新】(不再锁 Ubuntu 18.04/VS Code 1.83,见勘误 err-7.2-1);练习与任务为新编【补充】。 平台适用性:distribution-specific(以 Ubuntu 当前 LTS 为示例;其他发行版差异见迁移训练)。
① 学习目标
- 安装 Ubuntu 当前 LTS 虚拟机并完成 NAT 联网;
- 安装并启动 SSH 服务(systemctl enable --now);
- 完成 Windows→Ubuntu 的 SSH 免密登录;
- 理解桥接与 NAT 两种网络模式的区别;
- 输出可复现的环境搭建笔记(实践任务)。
② 前置知识
- 必修:0.2.1 Windows 环境(本章在宿主机上操作 VMware 与 ssh 客户端)。
③ 核心概念【来源】
| 概念 | 说明 |
|---|---|
| NAT 模式 | 虚拟机经宿主机共享出口上网;宿主机可访问虚拟机 |
| 桥接模式 | 虚拟机直接接入局域网,获得独立 IP |
| openssh-server | Ubuntu 的 SSH 服务端;systemctl enable --now ssh 自启+立即启动 |
| 公钥互信 | 客户端持私钥、服务器 authorized_keys 存公钥;登录时挑战-应答验签 |
| 当前 LTS | 使用当前长期支持版 Ubuntu(【更新】:不锁 18.04 等历史版本) |
④ 通俗解释【补充】
把虚拟机想成你家里新添的一台"备用电脑":
- NAT 模式:这台备用电脑借用你家的宽带上网(共享出口),你在家里能直接找它说话(宿主机→虚拟机),但邻居不能直接敲它家门;
- 桥接模式:它直接接入小区局域网,和所有邻居平级,人人都能访问它;
- SSH 免密:给它配一把"认脸"的门锁——你持有唯一的私钥(人脸),门锁里存着你的"人脸模板"(公钥)。每次进门,门锁出题(挑战),你用私钥作答,验证通过就开门,全程不用输密码。
⑤ 示例代码
代码示例与验证记录
- examples/ssh-setup.txtUbuntu SSH 服务与免密登录命令清单✓ 文档核对(非执行)· Ubuntu LTS systemd + OpenSSH, 2026-08-15编译:
按文件内顺序在 Ubuntu 终端与 Windows 终端分别执行适用环境:Linux展开文档核对记录
sshd 状态: active (running) ssh 登录: 成功进入 Ubuntu shell(无需输入密码)
差异说明:主机名/IP 按实际环境替换;命令已按当前 LTS 核对
完整源码见 /code 代码示例页
⑥ 编译与运行方法
本章命令为系统配置命令,按清单顺序执行并核对预期输出;无需编译。第一条 C 程序的编译在 0.2.4。
⑦ 常见错误
| 症状 | 原因 | 解决 |
|---|---|---|
| 连不上 SSH | sshd 未启动/未安装 | sudo systemctl status ssh 确认 active |
| 免密仍要输密码 | 公钥未放对/权限过宽 | authorized_keys 权限 600、~/.ssh 目录 700 |
| 虚拟机无法上网 | NAT 网段配置错误 | 核对虚拟网卡网段与虚拟机 IP/网关 |
| 【纠错】连接不上就换旧版本系统 | 历史规避手段,现已过时 | 用当前 LTS + 最新稳定工具,见 err-7.2-1 |
⑧ 小练习
小练习
学习自测:提交后才显示答案与解析(前端判分,不作为正式考试)ex-0-2-2-1.VMware 中,虚拟机通过宿主机共享 IP 访问外网的模式是?(单选)
◌ 未作答ex-0-2-2-2.Ubuntu 上安装并立即启动 SSH 服务的命令是?(单选)
◌ 未作答ex-0-2-2-3.判断:SSH 免密登录依赖公钥在客户端、私钥在服务器的配对关系。(判断)
◌ 未作答
⑨ 章节测验
章节测验
⑩ 实战任务
实践任务
完成 Ubuntu 虚拟机 + SSH 免密登录并留档
独立完成 Ubuntu 虚拟机安装、NAT 联网、SSH 服务配置与 Windows→Ubuntu 免密登录, 输出一份可复现的环境搭建笔记。
输入与输出
无程序输入输出。交付物:搭建笔记(步骤+命令+验证输出)与最终"ssh 用户名@IP"免密成功的凭证。
功能要求
- 安装 Ubuntu 当前 LTS(虚拟机)
- 配置 NAT 网络并确认能访问外网(ping 通)
- 安装并启动 openssh-server(systemctl enable --now)
- 完成 ssh-keygen 与公钥互信,实现免密登录
限制条件
- 使用当前 LTS 与最新稳定工具,不锁旧版本(见勘误 err-7.2-10)
- 笔记自己写,命令需实测可复现
验收步骤(自检清单 0/4)
验收标准
- ping 外网成功(验收步骤 1)
- systemctl status ssh 显示 active(验收步骤 2)
- 免密 ssh 登录成功(验收步骤 4)
常见失败原因
- NAT 网段算错导致 IP 不在同一网段
- 装了 openssh-server 却忘了启动
- authorized_keys 权限过宽被 sshd 拒绝(应为 600)
可选扩展
- 配置 ~/.ssh/config 给虚拟机起别名(4.3.1 预告)
- 在 Ubuntu 里执行 ex1 命令清单验证 gcc(下一章 0.2.4 用)
完成必要清单后才能计入"已完成实践"(学习状态自动推导,不提供一键完成)
⑪ 面试问题
面试问题
说一下 SSH 免密登录的原理。高频Linux 系统编程 · medium
要点:客户端持私钥,服务器 authorized_keys 存公钥;连接时服务器用公钥挑战,客户端用私钥签名应答。
ssh-keygen 生成公私钥对:私钥留客户端(保密),公钥放进服务器的 ~/.ssh/authorized_keys。 登录时服务器生成随机挑战,客户端用私钥签名,服务器用公钥验签——全程不传输私钥。 排查要点:authorized_keys 权限 600、目录权限 700,否则 sshd 会拒绝。
追问:- 追问:为什么 authorized_keys 权限太宽会失效?
评分要点:- 公私钥分工
- 挑战-应答机制
- 权限细节加分
systemctl enable 和 start 有什么区别?Linux 系统编程 · easy
要点:enable 设置开机自启,start 立即启动;enable --now 两者一次完成。
systemctl start 只对本次运行生效(重启后失效);systemctl enable 写入开机自启链接 (重启后自动启动),但不影响当前状态;enable --now = enable + start。 对应排查场景:服务"重启后没了"→ 忘了 enable。
追问:- 追问:怎么查看服务是否开机自启?(systemctl is-enabled)
评分要点:- 立即启动 vs 开机自启
- enable --now 用法
虚拟机的桥接和 NAT 模式有什么区别?Linux 系统编程 · easy
要点:桥接=虚拟机直接接入局域网(独立 IP);NAT=经宿主机共享出口,宿主机可访问虚拟机。
桥接(bridged):虚拟机像一台独立电脑接入路由器,获得局域网 IP,局域网内其他设备可直接访问; NAT:虚拟机经宿主机做网络地址转换上网,宿主机能访问虚拟机,但局域网其他设备默认不能。 选型:需要外部设备直接访问虚拟机(如板卡 tftp 烧录)选桥接;日常学习与 SSH 用 NAT 即可。
追问:- 追问:NAT 模式下怎么让局域网访问虚拟机?(端口转发)
评分要点:- 两种模式网络位置
- 应用场景
⑫ 延伸阅读
- Ubuntu 官方文档:OpenSSH Server 配置(Ubuntu Server Guide - OpenSSH);
- man 手册:
man sshd_config(服务端配置项); - VMware 官方文档:NAT 网络配置;
- 下一章预告:0.2.3 VS Code 远程开发——在 Windows 上写 Linux 代码。
迁移训练(migration training)
把本章流程迁移到 其他发行版(Debian/CentOS 系) 或 WSL2: 不变的:SSH 原理、公钥互信、systemd 服务管理(Debian/Ubuntu 系); 要改的:包管理器(apt ↔ dnf/yum)、个别包名;WSL2 无需虚拟机与网络配置,直接安装 sshd 即可复用本章命令。
内容来源映射
| 内容部分 | 资料 | 位置 | 标记 | 说明 |
|---|---|---|---|---|
| VMware 网络模式、NAT 配置、SSH 免密流程 | Linux IO(1) | PAGE 1-10 | 【来源】 | 正文重新组织表述;命令已按当前环境核对 |
| 系统版本要求 | Linux IO(1) | PAGE 7-8 | 【更新】 | 原文要求"Ubuntu 18.04 + VS Code 1.83"并锁版本;已更新为 Ubuntu 当前 LTS + 最新 VS Code,不再锁旧版本 |
| 练习/测验/任务/面试题 | 无 | 【补充】 | 全部新编 |
本章勘误与更新记录(【纠错】/【更新】)
err-7.2-1 · 过时更新 · 出处 PAGE 7-8
原文:连接不上就换成 Ubuntu 18.04 + VS Code 1.83,并关闭自动更新
正确:使用 Ubuntu 当前 LTS 与最新稳定版 VS Code 即可正常远程开发;无需锁旧版本、无需关闭自动更新。若确实遇到兼容问题,先检查 Remote-SSH 插件版本与 sshd 状态,再按官方文档升级。
原因:锁旧版本属于 2020 年代初的临时规避手段,当前版本已无此问题;第一步报告 7.2 第 1 条过时项。