RK3588 ssh Failed to start OpenBSD Secure Shell server 以及E: Sub-process /usr/bin/dpkg returned无法下载软件

文章讲述了在Linux系统中遇到SSH服务启动失败的问题,原因是缺少权限分离用户和目录。通过创建用户sshd,建立所需目录并重启SSH服务解决了问题。此外,还描述了在使用apt时遇到的dpkg错误,通过删除statoverride文件中的相关条目以消除错误并重新安装软件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题1描述

首先安装好ssh服务:

apt update
apt install openssh-server openssh-client

启动ssh server

/etc/init.d/ssh start

然后收到如下报错:

root@firefly:~# systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: e>
     Active: failed (Result: exit-code) since Wed 2023-02-15 01:13:48 UTC; 57s >
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 3455 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=255/EXCEP>

Feb 15 01:13:48 firefly systemd[1]: ssh.service: Scheduled restart job, restart>
Feb 15 01:13:48 firefly systemd[1]: Stopped OpenBSD Secure Shell server.
Feb 15 01:13:48 firefly systemd[1]: ssh.service: Start request repeated too qui>
Feb 15 01:13:48 firefly systemd[1]: ssh.service: Failed with result 'exit-code'.
Feb 15 01:13:48 firefly systemd[1]: Failed to start OpenBSD Secure Shell server.

二、问题1解决

输入命令,查看具体错误:

root@firefly:~# /usr/sbin/sshd -T
Privilege separation user sshd does not exist

提示用户sshd不存在,我们创建一个用户:

vim /etc/passwd

添加这样一段内容:

sshd:x:109:65534::/var/run/sshd:/usr/sbin/nologin

上面的意思就是用户名sshd,用户组,权限组,登录时自动使用的bash等等。
继续查看还有没有其他错误:

root@firefly:/etc# sudo /usr/sbin/sshd -t
Missing privilege separation directory: /run/sshd

提示某个目录不存在:

mkdir /run/sshd

建立该目录,启动ssh服务,成功!

root@firefly:/etc# systemctl restart sshd.service

或者使用如下命令也可:

root@firefly:/etc# /etc/init.d/ssh start
Starting ssh (via systemctl): ssh.service.

三、问题2描述

每次使用apt下载软件的时候提示

dpkg: unrecoverable fatal error, aborting:
 unknown system user 'geoclue' in statoverride file; the system user got removed
before the override, which is most probably a packaging bug, to recover you
can remove the override manually with dpkg-statoverride
W: No sandbox user '_apt' on the system, can not drop privileges
E: Sub-process /usr/bin/dpkg returned an error code (2)

这种提示并不是完全一样的,但是都可以通过以下的方式解决

问题2解决

命令:

vim /var/lib/dpkg/statoverride

将geoclue那一行删除,重新安装

<think>好的,用户现在遇到了一个问题,就是在执行 `service ssh start` 之后,虽然显示启动成功,但检查状态时却显示 `sshd is not running`。这看起来有些矛盾,需要仔细分析可能的原因。 首先,用户之前尝试过连接SSH到端口8022,但被拒绝。可能已经按照之前的建议检查了端口配置,现在的问题转向服务启动失败。用户可能已经修改了SSH的配置,比如更改了端口或绑定地址,但配置错误导致服务无法启动。 接下来,我需要考虑可能导致服务启动后立即退出的原因。常见的问题包括配置文件中的语法错误,比如错误的端口号(例如设置为一个没有权限的端口,或者已经被占用的端口),或者SSH配置中的其他参数错误,比如无效的选项。此外,权限问题,比如密钥文件的权限不正确,也可能导致sshd无法启动。 用户可能在修改`sshd_config`时不小心输入了错误的配置项,比如拼写错误或者不支持的选项。例如,如果用户将端口改为8022,但Termux或其他环境没有权限绑定到该端口,或者该端口已被其他进程占用,这会导致sshd启动失败。 另外,查看日志是关键。用户需要运行`journalctl -u ssh`或者检查`/var/log/auth.log`来查看具体的错误信息。如果用户没有安装systemd,可能需要直接查看日志文件,或者使用`sudo tail -f /var/log/syslog`来实时跟踪日志。 还有可能,用户尝试以root身份运行,但某些系统配置禁止root登录,或者密钥认证的问题。如果配置文件中`PermitRootLogin`设置为`no`,但用户试图以root登录,也可能导致问题,不过这可能不会直接导致sshd无法启动,而是连接被拒绝。 另外,SELinux或AppArmor等安全模块可能会阻止sshd的启动,不过这在Termux或Ubuntu子系统中可能不是主要因素,但也不能完全排除。 用户还可能遇到的问题是,sshd没有正确生成主机密钥。如果第一次安装SSH服务器时密钥生成失败,sshd可能会启动失败。这时需要检查`/etc/ssh/`目录下的密钥文件是否存在,或者使用`ssh-keygen`重新生成。 综合来看,应该指导用户逐步检查配置文件语法,确认端口设置正确,检查日志中的具体错误,验证密钥文件权限,并确保没有端口冲突。此外,可能需要重新安装openssh-server,或者手动生成缺失的密钥文件。 另外,用户可能是在某种特定环境下运行,比如Termux中的Ubuntu子系统,可能存在一些特定的限制或配置差异,需要特别注意路径或权限问题。 最后,确保用户按照步骤操作,例如在修改配置后重启服务,并正确检查服务状态。如果所有方法都失败,可能需要更深入的日志分析或尝试以调试模式启动sshd来获取更多信息。</think>--- 遇到 `service ssh start` 显示成功但实际服务未运行的问题,通常由 **配置错误** 或 **权限冲突** 导致。以下是完整排查与解决方案: --- ### **一、直接原因分析** 1. **配置语法错误**:`/etc/ssh/sshd_config` 中存在错误(如无效参数、拼写错误)。 2. **端口冲突**:SSH 尝试绑定到已被占用的端口或权限不足的端口(如 `8022` 可能需 root 权限)。 3. **密钥文件缺失或权限错误**:SSH 依赖的密钥文件(如 `/etc/ssh/ssh_host_*_key`)未生成或权限不正确。 4. **系统兼容性问题**:Ubuntu 子系统与 Termux 的进程管理冲突。 --- ### **二、逐步解决方案** #### **步骤1:检查SSH配置语法** 在终端执行以下命令验证配置文件: ```bash sshd -t # 测试配置文件语法 ``` - **若有错误输出**(如 `Bad configuration option`),需根据提示修正 `/etc/ssh/sshd_config`。 - **常见错误**: - 注释符号 `#` 未正确添加或删除。 - 参数拼写错误(如 `PermitRootLogin` 写成 `PermitRootLog`)。 - 无效端口(如 `Port 80222` 超出范围)。 #### **步骤2:验证端口占用情况** 检查目标端口是否被占用(以默认端口 `22` 或自定义端口 `8022` 为例): ```bash netstat -tuln | grep ':22' # 检查22端口占用 lsof -i :22 # 查看占用进程 ``` - **若端口被占用**: - 终止占用进程:`kill -9 <PID>`。 - 或修改 SSH 端口:在 `/etc/ssh/sshd_config` 中设置 `Port 2222`(选择一个空闲端口)。 #### **步骤3:检查SSH密钥文件** SSH 服务需要密钥文件才能启动。检查以下文件是否存在: ```bash ls /etc/ssh/ssh_host_*_key # 查看密钥文件 ``` - **若文件缺失**,重新生成密钥: ```bash dpkg-reconfigure openssh-server # 重新生成密钥 ``` - **若权限错误**,修正权限: ```bash chmod 600 /etc/ssh/ssh_host_*_key # 密钥文件权限应为600 chmod 644 /etc/ssh/ssh_host_*.pub # 公钥文件权限应为644 ``` #### **步骤4:以调试模式启动SSH** 通过调试模式查看具体错误: ```bash /usr/sbin/sshd -d -p 22 # 以调试模式运行SSH(端口22) ``` - **输出示例**: - `error: Bind to port 22 on 0.0.0.0 failed: Permission denied` → 权限不足。 - `Could not load host key: /etc/ssh/ssh_host_ed25519_key` → 密钥文件缺失。 #### **步骤5:检查SELinux/AppArmor(罕见)** 若系统启用了安全模块(如 AppArmor),可能阻止 SSH 启动: ```bash aa-status # 查看AppArmor状态 ``` - **临时禁用测试**: ```bash systemctl stop apparmor # 停止AppArmor service ssh start # 再次尝试启动SSH ``` --- ### **三、针对 Termux + Ubuntu 子系统的特殊处理** #### **1. 端口绑定权限问题** Termux 默认限制低端口号(如 `22`),若需绑定 `22` 端口,需 root 权限。 **替代方案**: - 修改 SSH 端口为高位端口(如 `8022`): ```bash # /etc/ssh/sshd_config 中修改 Port 8022 ``` - 重启服务: ```bash service ssh restart ``` #### **2. Termux 与 Ubuntu 子系统的进程冲突** 若在 Termux 中同时运行 Ubuntu 子系统,可能导致端口监听混乱。 **解决方案**: - 在 Termux 中关闭 SSH 服务: ```bash pkill sshd # 终止 Termux 自带的SSH ``` - 确保 Ubuntu 子系统的 SSH 独占端口。 --- ### **四、完整操作流程示例** #### **场景**:配置 SSH 使用端口 `8022` 并修复启动失败 1. **修改配置文件**: ```bash nano /etc/ssh/sshd_config ``` - 修改内容: ```bash Port 8022 PermitRootLogin yes ListenAddress 0.0.0.0 ``` 2. **检查语法并重启服务**: ```bash sshd -t # 验证语法 service ssh restart # 重启服务 ``` 3. **验证端口监听**: ```bash netstat -tuln | grep 8022 # 确认8022端口已监听 ``` 4. **从 Termux 连接测试**: ```bash ssh root@localhost -p 8022 # 指定端口8022 ``` --- ### **五、总结** - **核心问题**:SSH 服务因配置错误、端口冲突或密钥问题无法启动。 - **关键命令**: - `sshd -t` → 检查配置语法。 - `netstat -tuln` → 查看端口占用。 - `journalctl -u ssh` → 查看日志。 - **预防措施**:修改配置前备份文件,逐步测试参数。 通过上述步骤,可精准定位并解决 SSH 服务“假启动”问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙蒂锅巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值