跳转到内容

输入关键词开始搜索

    SSH 与 Linux 服务器基础

    主题更新 2026-08-01置信度 high#教程#Linux#安全#基础#长青

    SSH 把远程连接、身份认证和加密传输组合为一条安全管理通道;可靠的服务器初始化则围绕密钥、普通管理员账户、最小权限和可恢复验证展开。

    云服务器交付时通常只有公网 IP、初始用户名和密码。直接长期使用默认账户、反复输入密码、开放过多端口或删除唯一登录入口,都会增加风险。

    更稳妥的目标是:

    • Mac 持有私钥,服务器只保存公钥;
    • 日常使用个人普通账户,通过 sudo 临时提权;
    • 新入口验证成功前保留旧入口;
    • 把主机、用户、密钥和网络入口分别理解。

    Ubuntu OpenSSH 文档给出了服务器配置、公钥复制和日志检查方法;Ubuntu 用户管理文档解释了 sudo 管理模式。

    对象 例子 作用
    客户端主机 Mac 发起连接并持有用户私钥
    服务器主机 云服务器 运行 sshd 并持有主机私钥
    远程用户 maxwellmou 决定登录后的 UID、目录和权限
    目标地址 域名或 IP 决定连接到哪台服务器
    Terminal window
    ssh maxwellmou@example.com

    这表示“以远程用户 maxwellmou 登录 example.com 指向的服务器”。用户名不是域名的一部分,也不会因为修改主机名而自动改变。

    SSH 中有两类容易混淆的密钥:

    1. 用户密钥:服务器用公钥验证“你是谁”。
    2. 主机密钥:客户端用已知主机指纹验证“服务器是谁”。

    首次连接时出现的 host authenticity 提示对应主机密钥,不是你的用户公钥。接受后,主机指纹通常记录在 ~/.ssh/known_hosts

    Terminal window
    ssh-keygen -t ed25519 -C "maxwell-mac"

    典型文件:

    ~/.ssh/id_ed25519 私钥
    ~/.ssh/id_ed25519.pub 公钥
    • 私钥只留在可信客户端,建议设置 passphrase。
    • 公钥可以复制到服务器或代码托管平台。
    • .pub 后缀是最直观的检查:传输公钥,绝不上传私钥。
    • -t ed25519 指定密钥算法,-C 只添加便于识别的注释。
    Terminal window
    ssh-copy-id -i ~/.ssh/id_ed25519.pub maxwellmou@example.com
    • -i 指定要安装的公钥文件
    • 目标是“远程用户@服务器”;
    • 工具把公钥追加到远程用户的 ~/.ssh/authorized_keys
    • 初次复制通常仍需一次密码或已有认证方式。

    随后测试:

    Terminal window
    ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 maxwellmou@example.com

    这里 -i 指客户端用于认证的私钥。同一个参数名都表示 identity file,但一个工具安装公钥,另一个客户端用私钥证明身份。

    服务器端授权公钥位于:

    ~/.ssh/authorized_keys

    常见权限基线:

    Terminal window
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    权限过宽时,sshd 可能拒绝公钥认证,因为其他用户能够替换授权密钥。

    在 Ubuntu/Debian 中,推荐创建个人账户,而不是直接重命名默认账户:

    Terminal window
    sudo adduser maxwellmou
    sudo usermod -aG sudo maxwellmou

    usermod -aG sudo maxwellmou 的含义:

    • usermod:修改已有用户;
    • -G sudo:让附加组列表包含 sudo
    • -a:append,在保留原附加组的基础上追加;
    • 第一个 sudo:用管理员权限执行 usermod

    只写 -G 而漏掉 -a 可能覆盖原有附加组。组成员变更通常在重新登录后生效。

    Ubuntu 默认不鼓励直接用 root 密码登录。普通管理员账户仍是自己的 UID,只在单条命令前使用 sudo 临时提权:

    Terminal window
    sudo apt update
    sudo systemctl restart ssh
    sudo whoami

    最后一条输出 root 只说明该命令以 root 权限执行,不代表当前 Shell 永久成为 root。

    更换默认用户或认证方式时,遵循可恢复顺序:

    1. 保留当前已登录窗口。
    2. 创建新用户并授予所需权限。
    3. 为新用户安装公钥。
    4. 在第二个终端直接登录新用户。
    5. 验证 sudo、工作目录和必要服务。
    6. 再决定锁定、禁用或删除旧用户。

    这个顺序用于防止唯一管理入口被自己切断。删除用户前还应确认其文件、定时任务和服务是否需要迁移。

    主机名是服务器在系统和局域网络中的名字,不等于公网 DNS:

    Terminal window
    sudo hostnamectl set-hostname maxwell-mou-server
    hostnamectl --static
    • hostnamectl 修改系统主机名;
    • DNS 记录仍需在 DNS 服务商处配置;
    • Shell 提示符通常在重新登录后显示新名称;
    • 云初始化系统可能覆盖主机名,需要按云厂商机制决定是否保留。

    ~/.ssh/config

    Host maxwell-server
    HostName example.com
    User maxwellmou
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 30

    以后只需:

    Terminal window
    ssh maxwell-server

    配置把用户、地址、密钥集中管理,但不会把私钥上传到服务器。

    • 公网通常只开放 SSH 和实际 Web 入口。
    • 数据库、内部 API 和管理端口优先绑定 127.0.0.1 或私网。
    • 先验证公钥登录,再考虑关闭密码认证。
    • 修改 sshd 配置前先检查配置并保留现有会话。
    • 云安全组与服务器防火墙是两层独立控制。
    • Ed25519 已成为常见的现代 SSH 用户密钥选择。
    • 硬件安全密钥与 FIDO2 可以让私钥操作留在硬件中。
    • 大规模环境更倾向短期证书、集中身份系统或跳板机,而非长期散落的静态公钥。
    • SSH 连接复用可以减少频繁建立连接的延迟,但安全边界仍由主机、用户和密钥决定。
    • 云厂商控制台“绑定密钥”和手动写入 authorized_keys 的生命周期管理不同,应确认哪一层是配置权威。
    • 是否关闭密码登录,应在公钥、应急控制台和备份入口验证后决定。
    • 多台服务器继续扩展时,需要考虑配置管理、密钥轮换和集中审计。
    • 对公网 SSH,还需结合防火墙、登录日志、补丁和最小权限,不能只依赖“换端口”。