当使用 systemctl 启动 SSHD 进程时,几秒钟后 systemd 会终止该进程

当使用 systemctl 启动 SSHD 进程时,几秒钟后 systemd 会终止该进程

当我使用 systemctl 启动 sshd 进程时,该进程成功启动,但约 5 秒后终止。当我在命令行上运行 ExecStart 命令时,ssh 运行没有任何问题。

有人能告诉我为什么 systemd 在开始使用 systemctl 时可能会向 sshd 发送 sigterm 吗?

我正在运行 SLES12-SP2。

运行“systemctl start sshd”后立即输出“systemctl status sshd”:

● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-07-09 12:51:10 BST; 2s ago
  Process: 21727 ExecStartPre=/usr/sbin/sshd-gen-keys-start (code=exited, status=0/SUCCESS)
 Main PID: 21734 (sshd)
    Tasks: 1 (limit: 8192)
   CGroup: /system.slice/sshd.service
           └─21734 /usr/sbin/sshd -D -ddd

Jul 09 12:51:10 Duke sshd[21734]: debug1: rexec_argv[2]='-ddd'
Jul 09 12:51:10 Duke sshd[21734]: debug3: oom_adjust_setup
Jul 09 12:51:10 Duke sshd[21734]: debug1: Set /proc/self/oom_score_adj from 0 to -1000
Jul 09 12:51:10 Duke sshd[21734]: debug2: fd 3 setting O_NONBLOCK
Jul 09 12:51:10 Duke sshd[21734]: debug1: Bind to port 22 on 0.0.0.0.
Jul 09 12:51:10 Duke sshd[21734]: Server listening on 0.0.0.0 port 22.
Jul 09 12:51:10 Duke sshd[21734]: debug2: fd 4 setting O_NONBLOCK
Jul 09 12:51:10 Duke sshd[21734]: debug3: sock_set_v6only: set socket 4 IPV6_V6ONLY
Jul 09 12:51:10 Duke sshd[21734]: debug1: Bind to port 22 on ::.
Jul 09 12:51:10 Duke sshd[21734]: Server listening on :: port 22.

大约 5 秒后,“systemctl status sshd”的输出:

● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Sun 2017-07-09 12:51:12 BST; 2s ago
  Process: 21734 ExecStart=/usr/sbin/sshd -D -ddd $SSHD_OPTS (code=exited, status=0/SUCCESS)
  Process: 21727 ExecStartPre=/usr/sbin/sshd-gen-keys-start (code=exited, status=0/SUCCESS)
 Main PID: 21734 (code=exited, status=0/SUCCESS)

Jul 09 12:51:10 Duke sshd[21734]: debug2: fd 3 setting O_NONBLOCK
Jul 09 12:51:10 Duke sshd[21734]: debug1: Bind to port 22 on 0.0.0.0.
Jul 09 12:51:10 Duke sshd[21734]: Server listening on 0.0.0.0 port 22.
Jul 09 12:51:10 Duke sshd[21734]: debug2: fd 4 setting O_NONBLOCK
Jul 09 12:51:10 Duke sshd[21734]: debug3: sock_set_v6only: set socket 4 IPV6_V6ONLY
Jul 09 12:51:10 Duke sshd[21734]: debug1: Bind to port 22 on ::.
Jul 09 12:51:10 Duke sshd[21734]: Server listening on :: port 22.
Jul 09 12:51:12 Duke systemd[1]: Stopping OpenSSH Daemon...
Jul 09 12:51:12 Duke systemd[1]: Stopped OpenSSH Daemon.
Jul 09 12:51:12 Duke sshd[21734]: Received signal 15; terminating.

/usr/lib/systemd/system/sshd.service 的内容:

[Unit]
Description=OpenSSH Daemon
After=network.target

[Service]
EnvironmentFile=-/etc/sysconfig/ssh
ExecStartPre=/usr/sbin/sshd-gen-keys-start
ExecStart=/usr/sbin/sshd -D -ddd $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=never

[Install]
WantedBy=multi-user.target

注意:我将“重启”从“始终”改为“永不”,以便能够看到来自 sshd 的最后消息。在两种情况下,SSHD 都会终止。

答案1

-ddd向 添加了参数sshd。查看手册页,找到这些参数,您会注意到以下内容:

-d

调试模式。服务器将详细的调试输出发送到标准错误,而不会将其自身置于后台。 服务器也不会分叉并且只会处理一个连接。此选项仅用于服务器调试。多个 -d 选项可提高调试级别。最大为 3。

这正是预期的结果。

如果您希望查看调试消息,请使用LogLevel DEBUG3中的选项sshd_config。它不会影响此行为,但会记录消息。

相关内容