远程获取所有正在运行的服务的信息
前几天,我从邮箱中收到一个有趣的建议,关于使用 inetd / xinetd 远程获取有关所有正在运行的进程和网络连接的信息:
SSH 客户端可用于在远程 UNIX 机器上执行命令。可以使用相同的技术通过 netstat 信息获取当前网络和系统信息:
ssh you@remotebox netstat -a
ssh you@remotebox netstat -tulpn
他建议上述命令可以通过 inetd / xinetd 运行,以便管理员可以轻松连接并使用 telnet 从 100 台 UNIX 机器获取信息。您所要做的就是在 UNIX / Linux 下打开 /etc/inetd.conf:
# vi /etc/inetd.conf
附加以下行:
netstat stream tcp nowait root /bin/netstat netstat -a
重新启动 inetd:
# /etc/init.d/openbsd-inetd restart
接下来,使用 telnet 连接到 netstat 服务(端口 15)并获取网络连接信息:
输出:
$ telnet server-name netstat
$ telnet 192.168.1.5 15
Trying 192.168.1.5... Connected to 192.168.1.5. Escape character is '^]'. Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:6881 *:* LISTEN tcp 0 0 *:6081 *:* LISTEN tcp 0 0 *:nfs *:* LISTEN tcp 0 0 localhost:6082 *:* LISTEN tcp 0 0 *:54053 *:* LISTEN tcp 0 0 *:59275 *:* LISTEN tcp 0 0 *:netstat *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 localhost:webcache *:* LISTEN tcp 0 0 *:43218 *:* LISTEN tcp 0 0 *:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 *:telnet *:* LISTEN tcp 0 0 *:3128 *:* LISTEN tcp 0 0 localhost:smtp *:* LISTEN tcp 0 1 vivek-desktop.loc:48925 bas4-kitchener06-:56662 SYN_SENT tcp 0 0 vivek-desktop.loc:54791 customer5673.pool:16273 ESTABLISHED tcp 0 0 vivek-desktop.loc:38398 59.94.1xx.yy:45483 ESTABLISHED tcp 0 0 vivek-desktop.loc:42048 60.21.zz.yyy:23235 ESTABLISHED ........... .... .... unix 3 [ ] STREAM CONNECTED 15973 unix 3 [ ] STREAM CONNECTED 15947 /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 15946 unix 3 [ ] STREAM CONNECTED 15936 /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 15935 unix 2 [ ] DGRAM 15931 unix 3 [ ] STREAM CONNECTED 15916 unix 3 [ ] STREAM CONNECTED 15915 unix 2 [ ] DGRAM 15906 Connection closed by foreign host.
此解决方案存在一些问题:
a]在端口 #15 上运行不必要的服务
b] Telnet 协议不安全
c]我强烈建议使用ssh 和无密码登录脚本来获取此类信息:
ssh user@remote-box netstat -a
ssh user@remote-box df -H
ssh user@remote-box free -m
ssh user@remote-box /path/to/script.pl