![无法在 CentOS 7 上安装 ssh:文件 /usr/sbin/sshd 上的存档解压失败](https://linux22.com/image/188606/%E6%97%A0%E6%B3%95%E5%9C%A8%20CentOS%207%20%E4%B8%8A%E5%AE%89%E8%A3%85%20ssh%EF%BC%9A%E6%96%87%E4%BB%B6%20%2Fusr%2Fsbin%2Fsshd%20%E4%B8%8A%E7%9A%84%E5%AD%98%E6%A1%A3%E8%A7%A3%E5%8E%8B%E5%A4%B1%E8%B4%A5.png)
我遇到了 SSH 问题并尝试重新安装它。
所以首先我yum remove openssh-server openssh-clients
成功了。
然后我尝试使用 重新安装它yum install openssh-server openssh-clients
,但出现以下错误:
[...]
Downloading packages:
--------------------------------------------------------------------------------
Total 1.6 MB/s | 1.1 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : openssh-server-7.4p1-21.el7.x86_64 1/2
Error unpacking rpm package openssh-server-7.4p1-21.el7.x86_64
error: unpacking of archive failed on file /usr/sbin/sshd: cpio: rename
Installing : openssh-clients-7.4p1-21.el7.x86_64 2/2
Error unpacking rpm package openssh-clients-7.4p1-21.el7.x86_64
error: openssh-server-7.4p1-21.el7.x86_64: install failed
error: unpacking of archive failed on file /usr/bin/ssh: cpio: rename
Verifying : openssh-clients-7.4p1-21.el7.x86_64 1/2
Verifying : openssh-server-7.4p1-21.el7.x86_64 2/2
Failed:
openssh-clients.x86_64 0:7.4p1-21.el7 openssh-server.x86_64 0:7.4p1-21.el7
Complete!
我读到这可能是这些文件中引发的不可变标志的问题。事实上,当我使用:
lsattr /usr/sbin/sshd
我得到:
----i----------- /usr/sbin/sshd
但是当我这样做chattr -i /usr/sbin/sshd
并再次检查lsattr
标志i
是否仍然存在时。
我怎样才能解决这个问题并能够再次安装 SSH?
我的CentOS版本是centos-release-7-9.2009.1.el7.centos.x86_64
我以 root (su) 身份执行所有这些操作。
答案1
当您卸载它时,它似乎尚未完全删除,请验证systemctl status sshd
是否仍显示输出。您可以运行“sudo systemctl stop sshd”,然后尝试重新安装。如果仍然失败,请运行“sudo systemctl禁用sshd”,然后重新启动或至少注销并重新登录并重新安装。
答案2
当然这是一个当地的您从 shell 访问的 PC 请运行:
sudo chattr -i /usr/bin/ssh
echo $?
sudo chattr -i /usr/sbin/sshd
echo $?
sudo killall -9 sshd
pgrep sshd
现在您可以继续重新安装 openssh 服务器和客户端。
yum install openssh-server openssh-clients
附录:您不应该使用它chattr +i
来“保护”您的系统,让我解释一下原因。每当您遭到黑客攻击时,攻击者都可能可以访问 root 帐户,然后他可以:
- 删除不可变属性(大多数 Linux 铁杆黑客都清楚这一点)
- 替换 SSH 守护进程使用的任何库,使其按照攻击者想要的方式工作
- 添加额外的守护进程,以授予 SSHD 之外的完全访问权限
- 替换内核或添加内核模块,这将改变/规避 SSHD 行为