Menu Close

16.7. 使用 sshd 服务的第二个实例创建自定义单元文件

系统管理员通常需要配置并运行多个服务实例。这可以通过创建原始服务配置文件的副本并修改某些参数来避免与服务的主实例冲突。以下流程演示了如何创建 sshd 服务第二个实例。

流程

  1. 创建第二个守护进程将使用的 sshd_config 文件副本:

    # cp /etc/ssh/sshd{,-second}_config
  2. 编辑上一步中创建的 sshd-second_config 文件,为第二个守护进程分配不同的端口号和 PID 文件:

    Port 22220
    PidFile /var/run/sshd-second.pid

    有关 PortPidFile 选项的详情,请查看 sshd_config(5)手册页。请确定您选择的端口没有被其他服务使用。在运行该服务前,PID 文件不一定存在,它会在服务启动时自动生成。

  3. sshd 服务创建 systemd 单元文件副本:

    # cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd-second.service
  4. 按如下方式更改上一步中创建的 sshd-second.service:

    1. 修改 Description 选项:

      Description=OpenSSH server second instance daemon
    2. 将 sshd.service 添加到 After 选项中指定的服务,因此第二实例仅在第一个实例启动后启动:

      After=syslog.target network.target auditd.service sshd.service
    3. sshd 的第一个实例包括密钥生成,因此删除 ExecStartPre=/usr/sbin/sshd-keygen 行。
    4. sshd 命令添加 -f /etc/ssh/sshd-second_config 参数,以便使用其它配置文件:

      ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS
    5. 在进行以上修改后,sshd-second.service 应该如下所示:

      [Unit]
      Description=OpenSSH server second instance daemon
      After=syslog.target network.target auditd.service sshd.service
      
      [Service]
      EnvironmentFile=/etc/sysconfig/sshd
      ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS
      ExecReload=/bin/kill -HUP $MAINPID
      KillMode=process
      Restart=on-failure
      RestartSec=42s
      
      [Install]
      WantedBy=multi-user.target
  5. 如果使用 SELinux,请将 sshd 的第二个实例的端口添加到 SSH 端口,否则 sshd 的第二个实例将被拒绝绑定到端口:

    # semanage port -a -t ssh_port_t -p tcp 22220
  6. 启用 sshd-second.service,以便在引导时自动启动:

    # systemctl enable sshd-second.service
  7. 使用 systemctl status 命令验证 sshd-second.service 是否在运行。
  8. 通过连接到该服务来验证是否正确启用了端口:

    ssh -p 22220 user@server

    如果使用防火墙,请确定正确配置了防火墙以便允许到第二个 sshd 实例的连接。