3.2.7. 定制 systemd

使用默认安装,通过 systemd 启动的过程中,在 network.target 启动后,很多网络服务 (参见 第 6 章 网络应用)作为后台守护进程(daemon)启动。 “sshd“ 也不列外。让我们修改为按需启动”sshd“ 作为一个定制化的例子。

首先,禁用系统安装的服务单元。

  1. $ sudo systemctl stop sshd.service
  2. $ sudo systemctl mask sshd.service

传统 Unix 服务的按需套接字激活(on-demand socket activation)系统由 indetd 超级服务来提供。在 systemd 下, 相同功能能够通过增加*.socket*.service 单元配置文件来启用。

sshd.socket 用来定义一个监听的套接字

  1. [Unit]
  2. Description=SSH Socket for Per-Connection Servers
  3. [Socket]
  4. ListenStream=22
  5. Accept=yes
  6. [Install]
  7. WantedBy=sockets.target

sshd@.service 作为 sshd.socket 匹配的服务文件

  1. [Unit]
  2. Description=SSH Per-Connection Server
  3. [Service]
  4. ExecStart=-/usr/sbin/sshd -i
  5. StandardInput=socket

然后重新加载。

  1. $ sudo systemctl daemon-reload