当我使用 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
。它不会影响此行为,但会记录消息。