web-dev-qa-db-ja.com

sshd_configでListenAddressを使用している場合、ssh.serviceは起動時に起動しませんが、起動後に手動で起動した場合は起動します

/etc/ssh/sshd_configにListenAddressがあります。 ssh.serviceは起動時に起動しませんが、起動後にservice ssh startを実行すると起動します。

/var/log/syslogからのエラーは次のとおりです:

$ Sudo cat /var/log/syslog | grep -i ssh
Feb  9 10:03:50 nook systemd[1]: ssh.service: Main process exited, code=exited, status=255/n/a
Feb  9 10:03:50 nook systemd[1]: ssh.service: Unit entered failed state.
Feb  9 10:03:50 nook systemd[1]: ssh.service: Failed with result 'exit-code'.

私はオンラインで調べましたが、何が悪いのか理解できないようです。起動後に手動で起動すると動作しますが、起動時に起動しません。 :/

これは私の/etc/ssh/sshd_configです:

UsePAM yes
PrintMotd no
AcceptEnv LANG LC_*
HostKey /etc/ssh/ssh_Host_ed25519_key
HostKey /etc/ssh/ssh_Host_rsa_key
HostKey /etc/ssh/ssh_Host_ecdsa_key
KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
LogLevel VERBOSE
Subsystem sftp  /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO
UsePrivilegeSeparation sandbox
Protocol 2
X11Forwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no
PermitEmptyPasswords no
IgnoreRhosts yes
UseDNS yes
Compression no
TCPKeepAlive no
AllowAgentForwarding no
PermitRootLogin no
AllowGroups sshusers
ClientAliveCountMax 0
ClientAliveInterval 300
LoginGraceTime 30
ListenAddress 192.168.1.100   # IP of server
MaxAuthTries 2
MaxSessions 2
MaxStartups 2
ChallengeResponseAuthentication yes

/var/log/syslogからの完全なブートログは https://Pastebin.com/SfjPQzX にあります。

2
IMTheNachoMan

私も同じ問題を抱えていました。この問題の根本的な原因は、すぐに使用できるsshdユニットファイルに依存関係としてnetwork.targetがあることです。 sshd構成ファイルでIPアドレスを明示的に指定する場合、sshdを開始する前に、インターフェースで構成する必要があります。network.targetが処理するものではありません。この問題を解決するには、rootの下のコンソールで行う必要があります。

# systemctl edit sshd

エディターが開いたら、network-online.targetへの依存関係を定義します。

[Unit]
After=network-online.target

'systemctl edit ...'コマンドはファイルを作成します

/ etc/systemd/system/$ {SERVICE_NAME} .d/override.conf

入力を使用して、保存後に依存関係ツリーを再読み込みします。これは通常、ユニットファイルを手動で編集した後に「systemctldaemon-reload」を実行することで実現します。

:/ lib/systemd/systemの下のユニットファイルは編集しないでください。これらはパッケージマネージャーによって管理されており、次の更新時に上書きされます。

ただし、ユニットの依存関係としてnetwork-online.targetを配置するだけではまだ十分ではありません。 systemdに同梱されているほとんどのLinuxベースのオペレーティングシステムでは、network-online.targetはnetwork.targetの直後に起動します。これは、network-online.targetが依存する別のサービスがデフォルトで無効になっているためです。 systemd-networkd-wait-online.serviceと呼ばれます。 systemd-networkd-wait-online.serviceが有効になっていることを確認してください

# systemctl is-enabled systemd-networkd-wait-online
disabled
# systemctl enable systemd-networkd-wait-online


[〜#〜] update [〜#〜]:このアドバイスは、ネットワーク管理にsystemd-networkdを使用しているオペレーティングシステムでのみ機能します。 systemd-networkdが有効になっていないシステムの場合、 "Restart = on-failure"オプションは "RestartSec = 5"とともに、起動試行間のスリープを制御するのに役立つ場合があります