Включение и отключение sshd при загрузке через systemd

У меня установлен 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?

Обратите внимание, что даже в этом запутанном состоянии я все же могу вручную запустить и остановить с помощью service ssh [start | stop] `.

2
задан 21 November 2017 в 22:35

3 ответа

Служба 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)

4
ответ дан 22 May 2018 в 16:01
  • 1
    Отличный ответ :)! – George Udosen 21 November 2017 в 23:02
  • 2
    Отлично, он работает. Это делает псевдонимы довольно непригодными, поскольку они работают для некоторых команд, а не для других. – BeeOnRope 21 November 2017 в 23:10
  • 3
    вот как работают служебные псевдонимы, вы можете использовать их, если служба загружена. – arryph 21 November 2017 в 23:26

Служба 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)

4
ответ дан 18 July 2018 в 02:52

Служба 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)

4
ответ дан 24 July 2018 в 17:40

Другие вопросы по тегам:

Похожие вопросы: