老铁爱金衫 2025-10-16 13:35 采纳率: 98.7%
浏览 20
已采纳

Ubuntu 24中sshd.service未找到怎么办?

在升级或全新安装Ubuntu 24.04后,用户执行 `systemctl status sshd.service` 时提示“Unit sshd.service could not be found”,导致无法通过SSH远程登录。这是由于Ubuntu默认使用 `ssh.service` 而非 `sshd.service` 作为OpenSSH服务器的服务名。许多用户习惯于CentOS/RHEL系系统的 `sshd.service` 命令,因此在Ubuntu中误用导致服务无法识别。此外,若未安装`openssh-server`,服务文件也不会生成。解决此问题需确认服务实际名称并检查SSH服务是否正确安装与启用。
  • 写回答

1条回答 默认 最新

  • 娟娟童装 2025-10-16 13:35
    关注

    Ubuntu 24.04中SSH服务无法识别的深度解析与解决方案

    1. 问题现象描述

    在完成Ubuntu 24.04的升级或全新安装后,许多系统管理员尝试通过执行以下命令检查SSH服务状态:

    systemctl status sshd.service

    却收到如下错误提示:

    Unit sshd.service could not be found.

    该提示表明系统无法识别名为 sshd.service 的服务单元。这直接导致用户误以为SSH服务异常,进而影响远程登录能力。

    此问题虽表面简单,但背后涉及服务命名规范、发行版差异、软件包依赖等多个层面。

    2. 根本原因分析

    • 服务名称差异:Ubuntu系列使用ssh.service作为OpenSSH服务器的服务名,而RHEL/CentOS系则使用sshd.service
    • 跨平台习惯迁移:大量运维人员长期使用CentOS环境,形成对sshd.service的路径依赖。
    • 软件未安装:若未显式安装openssh-server包,则服务文件根本不会生成。
    • 服务名混淆加剧排查难度:即使已安装正确软件包,错误的服务名仍会导致“服务不存在”的假象。

    3. 常见排查流程图

    graph TD
        A[执行 systemctl status sshd.service] --> B{提示服务未找到?}
        B -->|Yes| C[检查实际服务名称]
        C --> D[运行 systemctl list-units --type=service | grep ssh]
        D --> E{是否存在 ssh.service?}
        E -->|No| F[确认 openssh-server 是否安装]
        F --> G[dpkg -l | grep openssh-server]
        G --> H{是否列出?}
        H -->|No| I[安装 openssh-server]
        H -->|Yes| J[重新加载 systemd 配置]
        E -->|Yes| K[使用 systemctl status ssh.service]
        K --> L[验证服务是否 Active]
    

    4. 实际服务名称验证方法

    为避免命名误区,应主动查询当前系统中存在的SSH相关服务单元:

    systemctl list-units --type=service | grep -i ssh

    典型输出示例如下:

    UNITLOADACTIVESUBDESCRIPTION
    ssh.serviceloadedactiverunningOpenBSD Secure Shell server
    sshd-keygen@.serviceloadedinactivedeadOpenSSH Server Key Generation

    由此可见,主服务名为 ssh.service 而非 sshd.service

    5. openssh-server 安装状态检查

    即使服务名正确,若核心软件包未安装,服务依然无法启动。可通过以下命令确认:

    dpkg -l | grep openssh-server

    正常输出应包含:

    ii  openssh-server      1:9.6p1-3ubuntu5      amd64        secure shell (SSH) server, for secure access from remote machines

    若无输出,则需执行安装:

    sudo apt update
    sudo apt install -y openssh-server

    6. 服务启用与防火墙配置

    安装完成后,需确保服务已启用并开机自启:

    sudo systemctl enable ssh.service
    sudo systemctl start ssh.service

    同时检查UFW防火墙是否放行SSH端口(默认22):

    sudo ufw allow OpenSSH
    # 或指定端口
    sudo ufw allow 22/tcp

    查看状态:

    sudo ufw status verbose

    7. 兼容性脚本建议(多平台统一管理)

    对于跨RHEL/Ubuntu环境的自动化脚本,推荐使用条件判断来适配不同服务名:

    #!/bin/bash
    if [[ -f /etc/os-release ]]; then
        . /etc/os-release
        case $ID in
            ubuntu|debian)
                SSH_SERVICE="ssh"
                ;;
            rhel|centos|fedora)
                SSH_SERVICE="sshd"
                ;;
            *)
                echo "Unsupported OS"
                exit 1
                ;;
        esac
    else
        echo "Cannot detect OS"
        exit 1
    fi
    
    systemctl status ${SSH_SERVICE}.service

    此类设计可显著提升脚本在异构环境中的健壮性。

    8. 系统日志辅助诊断

    当服务仍无法启动时,应结合日志深入分析:

    journalctl -u ssh.service --since "1 hour ago"

    重点关注:

    • 权限问题(如/etc/ssh/sshd_config配置错误)
    • 密钥文件缺失(如ssh_host_rsa_key
    • 端口被占用
    • SELinux/AppArmor策略限制(尽管Ubuntu默认使用AppArmor)

    日志是定位深层次问题的关键入口。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 10月16日