---
url: https://eoht.net/vps/settings/ubuntu.md
description: >-
  面向使用 systemd 的 Debian 和 Ubuntu，介绍 SSH 安装与验证、APT 更新与清理、时间同步和主机名设置，说明管理员权限、SSH
  配置检查及可选桌面软件移除的边界。
---

# Debian/Ubuntu 初始设置：SSH、软件更新、时间与主机名 {#optimize-debian-ubuntu-system}

本文整理 Debian/Ubuntu 安装后的常用管理步骤，适用于使用 systemd 的主机。各节按需要选择；软件清理、远程登录和时间设置不等于内核或网络性能调优。通过 SSH 操作时保留当前会话，确认新连接可用后再退出。

## 系统下载 {#download-operating-system}

<Links
:grid="2"
:items="[
 {
   icon: 'logos:ubuntu',
   name: 'Ubuntu',
   desc: '选择 Ubuntu 桌面或服务器安装镜像',
   link: 'https://ubuntu.com/download'
 },
 {
   icon: 'logos:debian',
   name: 'Debian',
   desc: '访问 Debian 官方网站选择架构和安装介质',
   link: 'https://www.debian.org/'
 }
]"
/>

下载前核对 CPU 架构、镜像类型及发行版支持周期。安装后可用 `cat /etc/os-release` 和 `uname -m` 确认系统与架构。

## 开启 SSH 远程登录 {#enable-remote-ssh-login}

### 安装网络与 SSH 工具 {#install-network-and-ssh-tools}

```sh
sudo apt update
sudo apt install openssh-server iproute2
```

`iproute2` 提供 `ip`、`ss` 等工具；只有旧脚本明确依赖 `ifconfig`、`netstat` 时，才另装 `net-tools`。

### 验证 SSH 服务与监听 {#verify-ssh-service}

```sh
dpkg-query -W openssh-server
systemctl status ssh.service ssh.socket --no-pager
sudo ss -lntp
```

包查询只能证明是否安装。结合服务状态、监听端口和实际连接确认是否可用：部分系统由 `ssh.socket` 按需启动服务，未安装的 socket 单元也可能显示找不到，不能仅凭一个单元的状态判断 SSH 失败。

如果主机采用普通 `ssh.service` 且尚未启动，可按需执行：

```sh
sudo systemctl enable --now ssh.service
```

再从另一台设备用实际用户名、服务器地址和端口连接。连接超时还要检查云安全组、主机防火墙和路由；无需为测试开放所有端口。

## 安装 nano 和 htop {#install-nano-and-htop}

```sh
sudo apt install nano htop
```

`nano` 中按 `Ctrl+O`、回车保存，`Ctrl+X` 退出；它不使用 Vim 的 `i`、`:wq` 操作。`htop` 是交互式进程查看器，按 `q` 退出。

## 按需删除预装软件 {#remove-preinstalled-software}

先查看确实不用的软件包，并模拟移除，例如：

```sh
apt list --installed
apt -s remove thunderbird
```

确认模拟结果没有带走所需桌面、网络或远程管理组件后，才执行对应的 `sudo apt remove thunderbird`。`remove` 通常保留系统级配置，`purge` 还会移除包管理器跟踪的配置文件；不应照搬其他发行版的一整组软件名。

## 更新软件与清理无用依赖 {#remove-unused-dependencies}

```sh
sudo apt update
sudo apt upgrade
apt -s autoremove
```

`update` 刷新包索引；`upgrade` 升级已安装的软件包。检查最后一条列出的候选依赖，确认不用后再运行 `sudo apt autoremove`。不要在未检查列表时添加自动确认参数。

## 评估是否移除桌面环境 {#remove-desktop-environment}

服务器镜像通常无需安装桌面。已经安装桌面的系统，先确认用途、显示管理器与桌面元包；云控制台恢复路径和 SSH 也应可用。以 GNOME 为例，可以先查看模拟结果：

```sh
apt -s remove gnome-shell
```

这只是单个软件包的模拟，并不保证完整卸载某一发行版的桌面。Ubuntu、Debian 及不同安装任务使用的元包不同，应按实际包清单制定移除范围。若仍需本地图形登录，保留桌面即可；移除桌面不是初始设置的必要步骤。

## 同步时间 {#synchronize-system-time}

### 检查已有时间同步服务 {#install-ntpdate}

```sh
timedatectl status
systemctl status systemd-timesyncd.service chrony.service --no-pager
```

使用实际已安装的服务；未安装的单元显示找不到属于正常情况。主机通常只需一个时间同步客户端，不必额外安装并定时执行 `ntpdate`。

### 启用网络时间同步 {#sync-system-time-with-network}

如果系统已有可用的时间同步服务，可通过以下命令启用并检查：

```sh
sudo timedatectl set-ntp true
timedatectl status
```

若提示不支持或没有可用服务，应按发行版配置 `systemd-timesyncd` 或 Chrony；不要将命令返回成功等同于已经完成同步。查看同步状态、服务日志与配置的时间源是否可达。

需要北京时间显示时，可单独设置时区：

```sh
sudo timedatectl set-timezone Asia/Shanghai
```

时区控制显示方式，与系统是否准确同步是两件事。

### 硬件时钟的处理 {#sync-time-to-hardware-clock}

正常运行的时间同步服务和系统关机流程通常会处理时钟，无需每次手工写入硬件时钟。虚拟机或容器可能没有可访问的 RTC。确有硬件时钟维护需求时，先确认系统时间准确，再依据宿主机和双系统约定处理 UTC/本地时间，不将 `hwclock --systohc` 作为所有服务器的固定步骤。

## 修改主机名 {#change-hostname}

将 `my-server` 替换为目标名称：

```sh
sudo hostnamectl set-hostname my-server
hostnamectl status
hostname
```

同时检查 `/etc/hosts` 是否有旧主机名对应的记录，按实际地址更新名称，保留 `localhost` 等基础记录。新主机名立即生效，当前终端提示符可能在新会话中才更新，无需为此重启。

## 管理员权限与 Root 远程登录 {#enable-root-login}

日常管理优先使用普通账号加 `sudo`。Root 的本地密码、能否使用 sudo、能否通过 SSH 登录，是不同设置；安装系统后不需要默认开启 root 密码远程登录。

### 临时取得管理员权限 {#obtain-root-access}

```sh
sudo -i
```

完成需要管理员权限的工作后运行 `exit` 返回普通用户。此操作不需要修改 root 密码，也不会自动开放 root 的 SSH 登录。

### 修改与检查 SSH 配置 {#edit-ssh-configuration}

先在第二个会话验证普通管理员账号及其密钥能登录，再调整认证策略。编辑配置前备份：

```sh
sudo cp -a /etc/ssh/sshd_config "/etc/ssh/sshd_config.backup.$(date +%Y%m%d%H%M%S)"
sudo nano /etc/ssh/sshd_config
```

例如，确认普通管理员账号可用后，可禁止 root 远程登录：

```text
PermitRootLogin no
```

只有已经验证密钥登录、且不再依赖密码登录时，才考虑将 `PasswordAuthentication` 设为 `no`。配置可能还包含 `Include` 文件与 `Match` 条件；不能假设文件末尾追加一行就一定覆盖先前值。[OpenSSH 配置说明](https://manpages.debian.org/bookworm/openssh-server/sshd_config.5.en.html)

### 应用配置并验证新连接 {#reboot-server}

```sh
sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication'
```

只有语法检查通过后才应用。上述有效配置输出未指定连接条件；若使用了 `Match`，还需结合目标用户和来源地址核对。对这里的认证配置变更，在普通服务运行方式下可执行：

```sh
sudo systemctl reload ssh.service
```

保留旧会话，使用新会话重新验证登录与 sudo。如果使用 socket 激活或更改了监听地址、端口，应按该发行版的 SSH 单元配置处理；认证配置更新不需要重启整台服务器。
