22.2.4 举例:通过xinetd启动SSH服务
作为例子,本节将带领读者配置SSH服务的xinetd实现。总的来说,在xinetd中添加服务无非是下面这几步:
(1)修改(增加)配置文件;
(2)停用该服务的守护进程;
(3)重启xinetd使配置生效;
(4)如果需要,从相应的rc目录中移除该服务的启动脚本。
下面就来逐一实现以上各个步骤。首先在/etc/xinetd.d目录下建立文件ssh,包含下面这些内容。
service ssh
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
log_on_success += DURATION
disable = no
}
注意log_on_success参数允许使用“+=”这样的赋值方式,表示在原有默认值的基础上添加,而不是推倒重来。类似地,也可以使用“-=”在默认值的基础上减去一些值。参数的默认值通常在/etc/xinetd.conf中设置。
下一步停用SSH守护进程,为xinetd接管22端口铺平道路。
$ sudo /etc/init.d/ssh stop
* Stopping OpenBSD Secure Shell server sshd [ OK ]
重新启动xinetd使配置生效。
$ sudo /etc/init.d/xinetd restart
* Stopping internet superserver xinetd [ OK ]
* Starting internet superserver xinetd [ OK ]
运行netstat -tulnp命令查看22端口的情况,发现xinetd已经顺利接管了SSH通信 端口。
$ sudo netstat -tulnp | grep 22 ##查看22端口状态
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8356/xinetd
现在尝试连接本地的SSH服务。对于客户端而言,看上去和standalone方式没有什么不同。
$ ssh localhost -l lewis
lewis@localhost's password:
如果在安装SSH服务器的时候选择了随系统启动(通常这是默认配置),那么接下来还要从相应的rc目录中移除SSH服务的启动脚本,否则下次启动系统的时候xinetd将无法运行。假设系统默认启动到运行级5(可以参考22.1节获取有关运行级的详细信息)。
$ cd /etc/rc5.d/ ##进入相应的rc目录
$ ls | grep ssh ##查找SSH启动脚本
S16ssh
$ sudo mv S16ssh ../rc_bak.d/S16ssh_rc5_bak ##移动到另一个地方备份起来
%注意:不要随便删除启动脚本,而应该把它移动到另一个地方,并且取一个有意义的名字。这样在以后需要的时候可以方便地找回来。