Bug#923508: systemd not restarting sshd on Debian 9 Stretch i386 due to RestartPreventExitStatus=255 in sshd.service file

Andrew Roberts andrewm.roberts at sky.com
Fri Mar 1 07:59:56 GMT 2019


Package: systemd
Version: 232-25+deb9u

On Debian 9 stretch with the latest updates systemd no longer restarts 
sshd due to changes to the sshd.service unit file.

The line:

RestartPreventExitStatus=255 has been added to the master sshd unit file 
in recent systemd/sshd updates.

This means if the network interface is not up by the time sshd tries to 
start, sshd will return a result code of 255, and systemd will NOT try 
to restart it.

This is obviously a HUGE problem for anybody using sshd as their 
exclusive means of accessing a system. On many systems the network can 
take a considerable amount of time to start.

When you finally do get physical access to a system, and try to override 
the default unit file by adding:

RestartPreventExitStatus=

to the end of /etc/systemd/system/sshd.service.d/override.conf

and running systemctl daemon-reload and rebooting

You find that the default of 255 is NOT overridden. I already had:

[Service]

Restart=always

RestartSec=5

in the override.conf file. What part of ALWAYS does systemd not understand!

I was forced to comment out the RestartPreventExitStatus=255 line in the 
/etc/systemd/system/sshd.service file, which is NOT a solution.

Also the version of systemd currently being used has bugs which when you 
manually restart a unit using systemctl restart sshd.service it warns 
about the configuration needing reloading using systemctl daemon-reload, 
even though you have just done that. This bug appears to have been fixed 
once in systemd in 2016, so either an old version is being used, or it 
has crept back in.

systemctl daemon-reload

systemctl restart sshd.service

Warning: sshd.service changed on disk. Run 'systemctl daemon-reload' to 
reload units.

Of course if systemd didn't start networking dependent units until the 
network was actually up then none of this would be an issue... Of course 
then you get into arguments about which network interface...

Clearly much more testing of systemd needs to be done before pushing 
updates of it. But the bottom line is NEVER break sshd.

Systemd Version:

||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  systemd        232-25+deb9u i386         system and service manager

Openssh Server version:

||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  openssh-server 1:7.4p1-10+d i386         secure shell (SSH) server, 
for se

System Version:

uname -a
Linux sempron 4.9.0-8-686-pae #1 SMP Debian 4.9.144-3.1 (2019-02-19) 
i686 GNU/Linux

cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"

apt show libc6 | grep ^Version

Version: 2.24-11+deb9u4

Error messages from sshd when booting using default config 
(RestartPreventExitStatus=255 in /etc/systemd/system/sshd.service file)

journalctl -b0 | grep ssh

Mar 01 07:32:02 sempron sshd[432]: error: Bind to port XXXX on 
192.168.1.54 failed: Cannot assign requested address.
Mar 01 07:32:02 sempron sshd[432]: fatal: Cannot bind any address.
Mar 01 07:32:02 sempron systemd[1]: ssh.service: Main process exited, 
code=exited, status=255/n/a
Mar 01 07:32:02 sempron systemd[1]: ssh.service: Unit entered failed state.
Mar 01 07:32:02 sempron systemd[1]: ssh.service: Failed with result 
'exit-code'.
Mar 01 07:32:17 sempron systemd[700]: Listening on GnuPG cryptographic 
agent (ssh-agent emulation).

where XXXX is the sshd port number

/etc/systemd/system/sshd.service file used for above log file:

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
#Restart=on-failure
Restart=always
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service

/etc/systemd/system/sshd.service.d/override.conf

[Unit]
After=network.target

[Service]
Restart=always
RestartSec=5
RestartPreventExitStatus=

Commenting out RestartPreventExitStatus=255 in sshd.service, doing 
systemctl daemon-reload, and rebooting gives:

journalctl -b0 | grep ssh

Mar 01 07:38:24 sempron sshd[426]: error: Bind to port XXXX on 
192.168.1.54 failed: Cannot assign requested address.
Mar 01 07:38:24 sempron sshd[426]: fatal: Cannot bind any address.
Mar 01 07:38:24 sempron systemd[1]: ssh.service: Main process exited, 
code=exited, status=255/n/a
Mar 01 07:38:24 sempron systemd[1]: ssh.service: Unit entered failed state.
Mar 01 07:38:24 sempron systemd[1]: ssh.service: Failed with result 
'exit-code'.
Mar 01 07:38:24 sempron systemd[1]: ssh.service: Service hold-off time 
over, scheduling restart.
Mar 01 07:38:25 sempron sshd[437]: error: Bind to port XXXX on 
192.168.1.54 failed: Cannot assign requested address.
Mar 01 07:38:25 sempron sshd[437]: fatal: Cannot bind any address.
Mar 01 07:38:25 sempron systemd[1]: ssh.service: Main process exited, 
code=exited, status=255/n/a
Mar 01 07:38:25 sempron systemd[1]: ssh.service: Unit entered failed state.
Mar 01 07:38:25 sempron systemd[1]: ssh.service: Failed with result 
'exit-code'.
Mar 01 07:38:25 sempron systemd[1]: ssh.service: Service hold-off time 
over, scheduling restart.
Mar 01 07:38:25 sempron sshd[454]: Server listening on 192.168.1.54 port 
XXXX.
Mar 01 07:38:26 sempron sshd[454]: Received SIGHUP; restarting.
Mar 01 07:38:26 sempron sshd[454]: Server listening on 192.168.1.54 port 
XXXX.
Mar 01 07:38:26 sempron sshd[454]: Received SIGHUP; restarting.
Mar 01 07:38:26 sempron sshd[454]: Server listening on 192.168.1.54 port 
XXXX.
Mar 01 07:38:53 sempron systemd[941]: Listening on GnuPG cryptographic 
agent (ssh-agent emulation).

where XXXX is the sshd port number

/etc/systemd/system/sshd.service file used for above log file:

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
#Restart=on-failure
Restart=always
#RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service

/etc/systemd/system/sshd.service.d/override.conf

[Unit]
After=network.target

[Service]
Restart=always
RestartSec=5
RestartPreventExitStatus=



More information about the Pkg-systemd-maintainers mailing list