我想在我的设备上使用 ssh,并且我可以使用 启动 sshd systemctl start sshd
,但我希望它在启动时自动启动。问题是,如果我尝试sudo systemctl enable sshd
,我会收到以下错误:
Failed to enable unit: File /etc/systemd/system/multi-user.target.wants/sshd.service already exists.
如何解决此问题,以便在启动设备时启动 ssh 服务器?
sudo systemctl status sshd
编辑:这是我启动后立即运行时的输出:
○ sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
答案1
sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
这表示该服务当前已禁用(= 未配置为启动)且未运行。
消息
Failed to enable unit: File /etc/systemd/system/multi-user.target.wants/sshd.service already exists.
表示/etc/systemd/system/multi-user.target.wants/sshd.service
已经存在。它不应该在那里,因为根据 ,该服务已被禁用systemctl
。
中的所有文件都应该是指向已启用服务的/etc/systemd/system/multi-user.target.wants/
实际文件的符号链接。*.service
由于sshd.service
实际上并未启用,这表明这要么是损坏的符号链接,要么是(意外或恶意)放置在其中的其他文件。
您可能应该运行 als -l /etc/systemd/system/multi-user.target.wants/sshd.service
来查看它是否是损坏的符号链接,或者是指向其他服务或其他文件的链接。如果它似乎是指向其他有效*.service
文件的链接,则可能存在恶意行为,即您的系统可能已被黑客攻击。如果它看起来是一个随机的不相关文件,则可能是作为 root 执行的错误命令的结果。
如果您的系统似乎已被黑客入侵,请参阅:
- 如何处理受感染的服务器?在服务器故障中
- 如何处理受感染的服务器?信息安全硕士
无论如何,自从/etc/systemd/system/multi-user.target.wants/sshd.service
应该只是一个到真实的符号链接sshd.service
,删除它应该是安全的:
sudo rm /etc/systemd/system/multi-user.target.wants/sshd.service
删除错误的链接/文件后重新加载 systemd 配置可能是谨慎的做法,以确保systemd
不会因删除而感到困惑:
sudo systemctl daemon-reload
之后,您应该能够sshd.service
正常启用:
sudo systemctl enable sshd.service
答案2
在 Arch Linux 中,我认为你必须首先禁用 SSH 套接字。
作为 root 用户,执行以下操作:
systemctl disable sshd.socket
systemctl enable sshd.service
答案3
sudo rm /etc/systemd/system/multi-user.target.wants/sshd.service
sudo systemctl enable sshd