![通过 systemd 在启动时启用和禁用 sshd](https://linux22.com/image/897515/%E9%80%9A%E8%BF%87%20systemd%20%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%90%AF%E7%94%A8%E5%92%8C%E7%A6%81%E7%94%A8%20sshd.png)
我已经openssh-server
安装了,但有时我想sshd
在启动时默认关闭该服务,而仅在需要时从终端启动它。
根据建议许多其他问题systemd
在我使用的 16.04 发行版中,在启动时启用和禁用服务应该很简单:
$sudo systemctl disable sshd.service
这似乎有效。但是,此后我无法再在启动时启用该服务:
$sudo systemctl enable sshd.service
Failed to execute operation: No such file or directory
即使卸载并重新安装也openssh-server
无法解决问题,但是purge
可以。
sshd
一旦我通过 禁用它,如何在启动时重新启用它systemd
?
请注意,即使在这种混乱的状态下,我仍然可以通过 [start|stop] 手动启动和停止服务service ssh
。
答案1
sshd 服务原本写为 ssh.service,sshd.service 被设置为别名。查看以下输出的最后一行。
arryph@localhost:~$ systemctl cat sshd.service
# /lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
[Install]
WantedBy=multi-user.target
Alias=sshd.service
因此,当ssh.service
启用时,我们可以将其称为sshd.service
。但是当您禁用sshd.service
并重新启动时,ssh.service
不再加载,因此您无法sshd.service
在该条件下将其称为 。您必须将其称为ssh.service
。因此,如果您运行sudo systemctl enable ssh.service
,它将成功启用ssh.service
(别名为sshd.service
)。