Linux系统下解决Unit sshd.service not found问题

2026-07-26 21:49:39 42 次阅读

在Linux系统运维与服务器管理中,sshd.service not found 是一个比较典型但容易误判的问题。很多人在执行 systemctl start sshdsystemctl status sshd.service 时,系统直接返回“Unit sshd.service not found”,从表面看像是服务损坏,但本质上通常与服务名称、安装状态或系统组件缺失有关。

OpenSSH服务在不同发行版中命名并不完全一致,这是导致该问题最常见的原因之一。在Debian、Ubuntu体系中,SSH服务通常被命名为 ssh.service,而在CentOS、RHEL等发行版中才使用 sshd.service。如果在Ubuntu系统中误执行 systemctl start sshd,系统自然会提示找不到该单元。

解决这类问题的第一步是确认系统中是否安装了OpenSSH Server组件。可以通过以下命令检查:

Bash
dpkg -l | grep openssh-server

或者在RPM系系统中使用:

Bash
rpm -qa | grep openssh-server

如果没有安装,需要先进行安装:

Bash
apt install openssh-server -y

安装完成后,系统通常会自动生成对应的服务文件,这时再执行:

Bash
systemctl start ssh

如果是在CentOS或Rocky Linux等系统中,则对应命令为:

Bash
yum install -y openssh-server
systemctl enable --now sshd

当确认服务已安装但仍然提示 not found,就需要检查 systemd 单元文件是否存在。服务文件一般位于:

Bash
/usr/lib/systemd/system/sshd.service

或:

Bash
/etc/systemd/system/sshd.service

如果文件不存在,说明安装过程不完整或者被误删,可以尝试重新安装 openssh-server 来恢复。

另一种常见情况是 systemd 缓存未刷新。在某些极简镜像或自定义系统中,即使服务文件存在,systemd 也可能未正确加载。这时可以执行:

Bash
systemctl daemon-reload

然后再尝试启动服务:

Bash
systemctl start sshd

在容器环境或精简Linux发行版中(例如Alpine或定制嵌入式系统),还可能根本没有 systemd,这种情况下 systemctl 本身不可用。需要使用 rc-service 或直接运行 sshd 守护进程:

Bash
/usr/sbin/sshd -D

对于一些云镜像环境,还需要注意SSH服务可能被替换为 cloud-init 管理方式,导致传统服务名称不可用。

排查过程中,还可以通过以下命令确认系统实际识别的SSH服务名称:

Bash
systemctl list-unit-files | grep ssh

如果看到的是 ssh.service 而不是 sshd.service,说明只需要使用正确的服务名即可,不需要额外修复。

在实际运维中,这个问题的核心并不是服务损坏,而是“服务名称不匹配 + 组件未安装 + systemd未加载”三类问题的组合。只要逐层排查,基本都能快速定位原因。

合理区分发行版差异、确认服务是否安装以及检查 systemd 状态,是解决 Unit sshd.service not found 的关键步骤。