SSH 与 Linux 服务器基础
SSH 把远程连接、身份认证和加密传输组合为一条安全管理通道;可靠的服务器初始化则围绕密钥、普通管理员账户、最小权限和可恢复验证展开。
云服务器交付时通常只有公网 IP、初始用户名和密码。直接长期使用默认账户、反复输入密码、开放过多端口或删除唯一登录入口,都会增加风险。
更稳妥的目标是:
- Mac 持有私钥,服务器只保存公钥;
- 日常使用个人普通账户,通过
sudo临时提权; - 新入口验证成功前保留旧入口;
- 把主机、用户、密钥和网络入口分别理解。
Ubuntu OpenSSH 文档给出了服务器配置、公钥复制和日志检查方法;Ubuntu 用户管理文档解释了 sudo 管理模式。
SSH 连接中的四个身份
Section titled “SSH 连接中的四个身份”| 对象 | 例子 | 作用 |
|---|---|---|
| 客户端主机 | Mac | 发起连接并持有用户私钥 |
| 服务器主机 | 云服务器 | 运行 sshd 并持有主机私钥 |
| 远程用户 | maxwellmou |
决定登录后的 UID、目录和权限 |
| 目标地址 | 域名或 IP | 决定连接到哪台服务器 |
ssh maxwellmou@example.com这表示“以远程用户 maxwellmou 登录 example.com 指向的服务器”。用户名不是域名的一部分,也不会因为修改主机名而自动改变。
用户密钥与主机密钥
Section titled “用户密钥与主机密钥”SSH 中有两类容易混淆的密钥:
- 用户密钥:服务器用公钥验证“你是谁”。
- 主机密钥:客户端用已知主机指纹验证“服务器是谁”。
首次连接时出现的 host authenticity 提示对应主机密钥,不是你的用户公钥。接受后,主机指纹通常记录在 ~/.ssh/known_hosts。
Ed25519 密钥对
Section titled “Ed25519 密钥对”ssh-keygen -t ed25519 -C "maxwell-mac"典型文件:
~/.ssh/id_ed25519 私钥~/.ssh/id_ed25519.pub 公钥- 私钥只留在可信客户端,建议设置 passphrase。
- 公钥可以复制到服务器或代码托管平台。
.pub后缀是最直观的检查:传输公钥,绝不上传私钥。-t ed25519指定密钥算法,-C只添加便于识别的注释。
ssh-copy-id 做了什么
Section titled “ssh-copy-id 做了什么”ssh-copy-id -i ~/.ssh/id_ed25519.pub maxwellmou@example.com-i指定要安装的公钥文件;- 目标是“远程用户@服务器”;
- 工具把公钥追加到远程用户的
~/.ssh/authorized_keys; - 初次复制通常仍需一次密码或已有认证方式。
随后测试:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 maxwellmou@example.com这里 -i 指客户端用于认证的私钥。同一个参数名都表示 identity file,但一个工具安装公钥,另一个客户端用私钥证明身份。
authorized_keys 与权限
Section titled “authorized_keys 与权限”服务器端授权公钥位于:
~/.ssh/authorized_keys常见权限基线:
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys权限过宽时,sshd 可能拒绝公钥认证,因为其他用户能够替换授权密钥。
创建个人管理员账户
Section titled “创建个人管理员账户”在 Ubuntu/Debian 中,推荐创建个人账户,而不是直接重命名默认账户:
sudo adduser maxwellmousudo usermod -aG sudo maxwellmouusermod -aG sudo maxwellmou 的含义:
usermod:修改已有用户;-G sudo:让附加组列表包含sudo;-a:append,在保留原附加组的基础上追加;- 第一个
sudo:用管理员权限执行usermod。
只写 -G 而漏掉 -a 可能覆盖原有附加组。组成员变更通常在重新登录后生效。
sudo 不是“把用户变成 root”
Section titled “sudo 不是“把用户变成 root””Ubuntu 默认不鼓励直接用 root 密码登录。普通管理员账户仍是自己的 UID,只在单条命令前使用 sudo 临时提权:
sudo apt updatesudo systemctl restart sshsudo whoami最后一条输出 root 只说明该命令以 root 权限执行,不代表当前 Shell 永久成为 root。
安全迁移顺序
Section titled “安全迁移顺序”更换默认用户或认证方式时,遵循可恢复顺序:
- 保留当前已登录窗口。
- 创建新用户并授予所需权限。
- 为新用户安装公钥。
- 在第二个终端直接登录新用户。
- 验证
sudo、工作目录和必要服务。 - 再决定锁定、禁用或删除旧用户。
这个顺序用于防止唯一管理入口被自己切断。删除用户前还应确认其文件、定时任务和服务是否需要迁移。
主机名是服务器在系统和局域网络中的名字,不等于公网 DNS:
sudo hostnamectl set-hostname maxwell-mou-serverhostnamectl --statichostnamectl修改系统主机名;- DNS 记录仍需在 DNS 服务商处配置;
- Shell 提示符通常在重新登录后显示新名称;
- 云初始化系统可能覆盖主机名,需要按云厂商机制决定是否保留。
用 SSH Config 消除重复参数
Section titled “用 SSH Config 消除重复参数”~/.ssh/config:
Host maxwell-server HostName example.com User maxwellmou IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes ServerAliveInterval 30以后只需:
ssh maxwell-server配置把用户、地址、密钥集中管理,但不会把私钥上传到服务器。
最小暴露原则
Section titled “最小暴露原则”- 公网通常只开放 SSH 和实际 Web 入口。
- 数据库、内部 API 和管理端口优先绑定
127.0.0.1或私网。 - 先验证公钥登录,再考虑关闭密码认证。
- 修改
sshd配置前先检查配置并保留现有会话。 - 云安全组与服务器防火墙是两层独立控制。
- Ed25519 已成为常见的现代 SSH 用户密钥选择。
- 硬件安全密钥与 FIDO2 可以让私钥操作留在硬件中。
- 大规模环境更倾向短期证书、集中身份系统或跳板机,而非长期散落的静态公钥。
- SSH 连接复用可以减少频繁建立连接的延迟,但安全边界仍由主机、用户和密钥决定。
- 云厂商控制台“绑定密钥”和手动写入
authorized_keys的生命周期管理不同,应确认哪一层是配置权威。 - 是否关闭密码登录,应在公钥、应急控制台和备份入口验证后决定。
- 多台服务器继续扩展时,需要考虑配置管理、密钥轮换和集中审计。
- 对公网 SSH,还需结合防火墙、登录日志、补丁和最小权限,不能只依赖“换端口”。