ubuntu-20.04 安装软件报错(openssh-server)

ubuntu上,通过使用apt upgrade 命令升级软件,结果openssh-server 报错 Setting up openssh-server (1:8.2p1-4ubuntu0.9) … dpkg: error processing package openssh-server (–configure):...

ubuntu上,通过使用apt upgrade 命令升级软件,结果openssh-server 报错

Setting up openssh-server (1:8.2p1-4ubuntu0.9) …

dpkg: error processing package openssh-server (–configure):

installed openssh-server package post-installation script subprocess returned error exit status 10

Setting up ufw (0.36-6ubuntu1.1) …

dpkg: error processing package ufw (–configure):

installed ufw package post-installation script subprocess returned error exit status 10

Errors were encountered while processing:

openssh-server
ufw

E: Sub-process /usr/bin/dpkg returned an error code (1)

这个错误已经存在几个月了,前端时间没有理会,以为只是一个软件报错,不会影响其他软件安装,只是每次安装软件都是提示这个错误,影响心情,这次安装fuse软件的时候,再次报E: Sub-process /usr/bin/dpkg returned an error code (1) 这个错误,结果fuse软件都没有安装成功,这就问题打了,必须到了解决这个问题的时候。

通过 grep 'openssh-server' /var/log/dpkg.log 命令查看dpkg.log 日志报如下错误:

 status half-configured openssh-server:amd64 1:8.2p1-4ubuntu0.13  就是通过  dpkg --configure openssh-server 配置的时候报错。说明软件再安装过程中没有安装完全。

我原想卸载openssh-server 再重新安装,而openssh-serverl 是inux系统远程登录的关键服务,删除这个势必会导致远程连接断开,结果我试zhuo apt remove openssh-server 竟然还是报“E: Sub-process /usr/bin/dpkg returned an error code (1)" 这个错误,软件删除不掉也安装不了,陷入了死胡同。

我把报错的信息贴给”deepseek“ 它给出的解决方案也是往上通用的方案,根本没啥鸟用。比方说:

”“”

sudo rm /var/lib/dpkg/lock

sudo dpkg --configure -a

重配置包

sudo dpkg-reconfigure openssh-server

“”“

这些命令根本没有作用,后来看到了一篇文章,dpkg是”debian"系统包括ubuntu的包管理工具,其中ubuntu下的 /var/lib/dpkg/info 是包含包管理的作用信息,举例来说:

在 /var/lib/dpkg/info 目录中,你可以找到以下类型的文件和目录:

控制文件 (*.control): 这些文件包含了关于包的详细信息,如包的名称、版本、依赖关系、描述等。这些文件通常以包的名称命名,并以 .control 结尾。例如,对于 nginx 包,你可能会找到一个名为 nginx.control 的文件。

预定义格式文件 (*.md5sums, *.list, *.shlibs, *.symbols, *.conffiles 等): 这些文件包含了额外的信息,如 MD5 校验和(用于验证包文件的完整性)、包中包含的文件列表、符号链接库信息、配置文件列表等。

作用

1,包管理:dpkg 使用这些文件来管理已安装的包。例如,当您运行 dpkg -l 命令时,它会读取这些文件来列出已安装的包及其版本。

2,依赖解析:在安装或更新软件包时,dpkg 会检查这些文件中的依赖关系信息,以确保所有必需的依赖都被满足。

3,配置管理:通过读取 *.conffiles 文件,dpkg 可以知道哪些配置文件是由包管理的,从而在必要时备份或还原这些文件。

4,软件包验证:通过检查 MD5 校验和等,dpkg 可以验证软件包文件的完整性,确保没有在传输或安装过程中被损坏。


我由此想到,既然 /var/lib/dpkg/info 在软件安装时候会检查里面的依赖,那么这个目录临时改个名字,然后新建一个空的info目录,再此安装openssh-server 时候肯定不会报错了吧,因为info没有历史遗留信息,所以我按照这个思路

一,cd  /var/lib/dpkg  目录新建info目录,安装完成openssh-server 把info下的文件copy到老的info.bak下,然后删除新目录,把旧目录改名为info

mv info inf.bak 

mkdir info

apt remove openssh-server (进行到这步的时候,我查看sshd服务已经停止了,神奇的是我的ssh远程连接并没有断开)

rm -rf /etc/ssh

apt install -y openssh-server  顺利安装完成openssh-server

apt install -y  openssh-client

mv info/* info.bak

rm -rf info

mv info.bak info

二,新建 /etc/ssh目录

安装完openssh-server /etc/ssh 目录并不存在,需要新建

mkdir -p /etc/ssh

然后从另外一台同样版本系统的ubntun 中copy /etc/ssh 下的目录文件到这台服务器上

apt remove openssh-server 的时候/etc/init.d/ssh 文件并没有删除,并不需要copy了

三,添加权限用户

删除openssh-server的时候删除了 sshd 这个用户,重新把这个用户建立下就可以了

我这里直接从另外一台服务器 /etc/passwd中直接copy过来了,如下:

sshd:x:111:65534::/run/sshd:/usr/sbin/nologin

这里设置了 sshd 运行的目录 /run/sshd

还得新建/run/sshd目录,mkdir -p /run/sshd 权限是root账号,所以,直接建立这个目录即可。

四,启动ssh

上述设置完毕,通过 /usr/sbin/sshd -t 来启动测试,如果没有任何提示,说明成功

然后 systemctl start ssh  启动sshd服务

通过systemctl status ssh 查看服务正常


然后把ssh服务加入到自启动中  systemctl enable ssh

搞定,收工!!!

 


五:总结

解决这个问题的关键思路是,既然 /var/li/dpkg/info 目录在安装软件的时候需要从这里查询软件的依赖,那我使用一个新的 info ,把老的info改名为info.bak ,安装完成openssh-server 把 新的info中的文件copy到老的info目录中,然后删除新的info目录,把老的info目录改成info目录,这个搞定了openssh-server 安装和删除都报错的问题。

  • 发表于 2025-07-26 14:33
  • 阅读 ( 28 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
石天
石天

437 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章