Linux 环境搭建与 SSH 远程连接
概述:从零搭建 Linux 开发环境(虚拟机/WSL2/云服务器),配置 SSH 远程连接与密钥认证,建立高效的远程开发工作流。
前置知识
- 了解虚拟化基本概念(宿主机、Guest OS)
- 具备基本的终端/命令行操作能力
学习目标
- 掌握主流虚拟化方案的选型与安装
- 完成 Ubuntu Server / Rocky Linux 的系统安装
- 配置 SSH 密钥认证实现免密登录
- 排查网络连接与 SSH 服务的常见问题
1. 环境方案选型
1.1 方案对比决策
图表渲染中…
| 方案 | 性能 | 隔离性 | 适用场景 |
|---|---|---|---|
| WSL2 | 接近原生 | 中(共享内核) | Windows 日常开发 |
| 虚拟机 | 损耗 10-20% | 高(完整隔离) | 需要快照/多系统 |
| 云服务器 | 原生 | 完全隔离 | 生产环境模拟 |
| Docker | 接近原生 | 中(共享内核) | 服务级隔离 |
1.2 虚拟机资源配置建议
| 用途 | CPU | 内存 | 磁盘 | 网络模式 |
|---|---|---|---|---|
| 学习/开发 | 2 核 | 2-4 GB | 40 GB | NAT |
| 模拟生产 | 4 核 | 8 GB | 100 GB | 桥接 |
| CI/CD 测试 | 2 核 | 4 GB | 60 GB | NAT |
2. Ubuntu Server 安装要点
2.1 安装流程
图表渲染中…
关键配置项:
| 步骤 | 配置 | 说明 |
|---|---|---|
| 网络 | DHCP 自动获取 | 避免手动配置出错 |
| 镜像源 | 阿里云/清华 | 国内环境加速下载 |
| 存储 | Use an entire disk | 自动分区(/、/boot、swap) |
| SSH | Install OpenSSH server | 必选,否则无法远程连接 |
2.2 安装后验证
bash
# 登录系统
ubuntu login: username
Password: ********
# 查看 IP 地址
ip addr show
# 关注 eth0/ens33 的 inet 字段
# 确认 SSH 服务运行
systemctl status ssh
# 应显示 active (running)3. Rocky Linux / CentOS 安装要点
3.1 与 Ubuntu 的差异
| 配置项 | Ubuntu Server | Rocky Linux |
|---|---|---|
| 安装界面 | Subiquity(现代) | Anaconda(传统) |
| 软件选择 | 默认最小安装 | 需手动选 Minimal Install |
| 网络 | 自动启用 | 需手动开启 ONBOOT=yes |
| SSH | 安装时勾选 | 默认已安装 |
| 防火墙 | ufw(默认关闭) | firewalld(默认开启) |
3.2 网络配置(关键差异)
bash
# Rocky Linux 网络配置文件
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 确保以下两项
BOOTPROTO=dhcp
ONBOOT=yes # CentOS 默认可能是 no,必须改为 yes
# 重启网络
sudo systemctl restart network
# 验证
ip addr show3.3 防火墙放行 SSH
bash
# Rocky Linux 默认开启防火墙,需放行 22 端口
sudo firewall-cmd --add-port=22/tcp --permanent
sudo firewall-cmd --reload
# 验证
sudo firewall-cmd --list-ports4. SSH 远程连接
4.1 SSH 协议工作原理
图表渲染中…
4.2 基本连接
bash
# 基本语法
ssh username@ip_address
# 指定端口
ssh -p 2222 username@ip_address
# 首次连接会提示确认 Host Key
# Are you sure you want to continue connecting (yes/no)?
# 输入 yes 后,Host Key 保存到 ~/.ssh/known_hosts4.3 SSH 客户端配置(简化登录)
bash
# ~/.ssh/config
Host dev
HostName 192.168.31.77
User tommark
Port 22
IdentityFile ~/.ssh/id_ed25519
Host production
HostName api.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/production_key
ServerAliveInterval 60
# 使用别名连接
ssh dev
# 等价于: ssh -i ~/.ssh/id_ed25519 tommark@192.168.31.774.4 常用 SSH 客户端工具
| 工具 | 平台 | 特点 |
|---|---|---|
| Terminal / iTerm2 | macOS | 原生体验,iTerm2 支持分屏 |
| Windows Terminal | Windows | 微软官方,支持 WSL/PowerShell |
| Termius | 全平台 | 跨设备同步,团队共享 |
| Xshell | Windows | 功能丰富,个人免费 |
| MobaXterm | Windows | 集成 SFTP/X11 |
5. SSH 密钥认证(免密登录)
5.1 配置流程
图表渲染中…
5.2 生成密钥对
bash
# 推荐 Ed25519(更安全、更快)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或 RSA 4096(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 生成文件:
# ~/.ssh/id_ed25519 ← 私钥(绝不泄露)
# ~/.ssh/id_ed25519.pub ← 公钥(可公开)5.3 上传公钥
bash
# 方式一:ssh-copy-id(推荐)
ssh-copy-id username@192.168.31.77
# 方式二:手动复制
cat ~/.ssh/id_ed25519.pub | ssh username@192.168.31.77 \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"5.4 服务器端权限设置
bash
# 权限必须正确,否则 SSH 会拒绝使用密钥
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 确认所有者
chown -R $USER:$USER ~/.ssh5.5 禁用密码登录(生产环境推荐)
bash
# /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin prohibit-password # 禁止 root 密码登录
# 重启 SSH 服务
sudo systemctl restart ssh # Ubuntu
sudo systemctl restart sshd # Rocky/CentOS
# 验证配置语法
sudo sshd -t警告:禁用密码登录前,务必先确认密钥登录可用,否则可能锁死自己。
6. 网络问题排查
6.1 排查流程
图表渲染中…
6.2 常用排查命令
bash
# 查看 IP 地址
ip addr show
# 测试网络连通性
ping -c 4 192.168.31.77
# 检查 SSH 服务状态
systemctl status ssh
# 检查端口监听
ss -tlnp | grep 22
# 查看 SSH 日志(排查认证失败)
sudo tail -f /var/log/auth.log # Ubuntu
sudo tail -f /var/log/secure # Rocky/CentOS
# 检查防火墙
sudo ufw status # Ubuntu
sudo firewall-cmd --list-all # Rocky/CentOS6.3 虚拟机网络模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| NAT | 虚拟机通过宿主机上网,外部不可访问 | 学习开发(推荐) |
| 桥接 | 虚拟机获得独立 IP,与宿主机同网段 | 模拟真实服务器 |
| Host-Only | 仅宿主机可访问虚拟机 | 安全隔离测试 |
7. 常见问题与排错
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 启动卡在 "wait for network" | 网络适配器未连接 | 虚拟机设置中勾选"连接网络适配器" |
| SSH 连接被拒绝 | sshd 未启动 | sudo systemctl start sshd |
| Permission denied (publickey) | 密钥权限过大 | chmod 600 ~/.ssh/id_* |
| Host key verification failed | 服务器重装后 IP 复用 | 删除 ~/.ssh/known_hosts 中对应行 |
| 云服务器无法连接 | 安全组未放行 22 端口 | 云控制台添加入站规则 |
| 连接超时 | 防火墙阻止 | 检查 ufw/firewalld/安全组 |
8. 最佳实践
- 密钥认证优先:生产环境禁用密码登录,仅允许 Ed25519 密钥
- 修改默认端口:将 SSH 端口改为非标准值(如 2222),减少扫描攻击
- 限制来源 IP:安全组/防火墙仅允许办公网 IP 访问 22 端口
- 使用 SSH Config:为每台服务器配置别名,避免记忆 IP 和参数
- 定期轮换密钥:团队共享密钥应定期更换,离职人员立即移除公钥
8.5 补充:SSH 客户端工具与安装后验证
常用 SSH 客户端工具
| 工具 | 平台 | 特点 |
|---|---|---|
| iTerm2 | macOS | 免费强大 |
| Windows Terminal | Windows | 现代界面,内置 SSH |
| PuTTY | Windows | 经典免费 |
| MobaXterm | Windows | 集成 SFTP |
| Termius | 全平台 | 云同步 |
安装后验证
登录后确认环境可用:
bash
ip addr show # 确认 IP
ping -c 4 www.baidu.com # 确认外网通畅虚拟机快捷键:VMware Fusion 释放鼠标 Ctrl+Cmd、快照 Ctrl+Cmd+S;VirtualBox 主机键为右 Ctrl。