Portál AbcLinuxu, 5. května 2025 15:02
echo "LABEL=TestLabel /mnt/label xfs defaults 1 1" >> /etc/fstab
, a rebootnout), tak spustí síť ale nespustí sshd. Takže stroj normálně pingá, je vidět, že naběhl, ale nedá se tam přihlásit a opravit to, a protože nemám přístup na konzoli, tak mám smůlu. Je to poněkud frustrující. Když v konzoli spustím sshd ručně, tak samozřejmě normálně naběhne a funguje.
Googlil jsem, překvapilo mě, že jsem toho moc nenašel, a nejnadějněji vypadá udělat
systemctl add-wants emergency.target sshd.serviceJenže to emergency mode zdá se komplet přeskočí (wtf), tak se bojím, že pokud bude k emergency mode nějaký jiný/závažnější důvod, tak se to kreativně rozbije nějak jinak a třeba to ani nespustí shell a nepůjde to tak opravit ani pokud konzoli mám. Jak se tohle má správně řešit? A myslíte si, že je to na bugreport? Podle mě když to spustí síť, tak to má rovnou zkusit spustit i sshd. Je to Debian stable, ale řešili to třeba i v redhatu.
Řešení dotazu:
ssh
závisí, jako „obyčejná“ unita, na sysinit.target
(což není explicitně napsané, je to Default Dependencies), jak můžeme vidět v systemctl list-dependencies ssh
. sysinit.target
závisí na local-fs.target
a různých dalších věcech, a když něco z toho selže, tak se sysinit nestane, a tím se nespustí žádné ostatní „obyčejné“ unity.
Řešení je třeba následující: vyrobím unitu /etc/systemd/system/sshd-rescue.service
, která bude přesnou kopií distribuční ssh unity (systemctl cat ssh
), až na vyznačené změny:
[Unit] Description=OpenBSD Secure Shell server Documentation=man:sshd(8) man:sshd_config(5) After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run DefaultDependencies=no [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 RestartPreventExitStatus=255 Type=notify RuntimeDirectory=sshd RuntimeDirectoryMode=0755 [Install] WantedBy=emergency.target #Alias=sshd.serviceTu pak stačí enablovat (
systemctl enable sshd-rescue
) a pak už se sshd v rescue spustí, a „normální“ ssh se spustí při úspěšném bootu.
Ještě upozornění, že do toho rescue sshd se nedá přihlásit jako ne-root: vypíše to
System is booting up. Unprivileged users are not permitted to log in yet. Please come back later. For technical details, see pam_nologin(8).Já mám přihlášení roota klíčem povolené, ale pokud ho zakazujete, tak si v té rescue unitě asi dejte extra konfigurák, kde bude povolené.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.