我被赋予了一项任务,即创建一个 Excel 表,其中包含我们 AWS EC2 环境中的所有 Linux 服务器,因为主要目的是将所有服务器从 AWS 中移除并迁移到我们的虚拟环境中。这些是感兴趣的行标题:服务器名称、角色、CPU、内存、磁盘、应用程序组件及其版本。
提取服务器名称和服务器规范没有问题,但找到服务器角色的最佳方法是什么?我心中有一些想法,但我很想听听你的想法……以下是我的:
- 运行
rpm -qa --queryformat "%{NAME}\n"
以将所有包名称提取到列表中,这可以帮助我了解服务器的作用。 - 运行
chkconfig --list |grep on
以查看哪些守护进程已启用。 - 运行
top
以查看哪些进程正在运行。
答案1
您可以采取一些措施来尝试确定系统上运行的程序。虽然不能保证,但很可能任何正在运行的生产服务都已在本地子网上或通过 NAT 提供给网络。考虑到这一点,您可以检查服务器正在监听哪些端口,以了解那里的情况。一个好的命令是:
alex:~/ $ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 945/smbd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1746/nginx
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1437/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1310/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3746/cupsd
从上面的示例输出可以看出,它向您显示了协议版本(tcp 或 udp)、正在监听的地址、打开的端口和正在监听的程序。
在上面的截断示例中(台式机),您可以看到 tcp 端口 139、80、53、22 和 631 正在监听。这些端口分别解析为 samba、http、dns、ssh 和 ipp,当您检查监听该端口的程序时,可以确认这一点。
此外,大多数基于 Debian 和 Red Hat 的 Linux 发行版都使用系统 V 并具有 services 命令。您可以使用它来提供服务及其状态的列表:
alex:~/ $ sudo service --status-all
[ + ] acpid
[ - ] anacron
[ + ] apparmor
[ ? ] apport
[ ? ] atieventsd
[ + ] avahi-daemon
[ ? ] binfmt-support
[ + ] bluetooth
[ - ] brltty
[ ? ] console-setup
[ + ] cron
[ ? ] cryptdisks
[ ? ] cryptdisks-early
[ + ] cups
[ + ] cups-browsed
[ - ] dbus
[ ? ] dns-clean
[ + ] dnsmasq
[ + ] ebtables
[ + ] friendly-recovery
[ - ] grub-common
[ ? ] irqbalance
[ + ] kerneloops
[ ? ] killprocs
[ ? ] kmod
[ + ] libvirt-bin
[ ? ] lightdm
[ ? ] networking
[ + ] nginx
[ + ] nmbd
[ ? ] ondemand
[ + ] openvpn
[ ? ] pppd-dns
[ - ] procps
[ - ] pulseaudio
[ ? ] rc.local
[ + ] resolvconf
[ - ] rsync
[ + ] rsyslog
[ + ] samba
[ - ] samba-ad-dc
[ + ] saned
[ ? ] sendsigs
[ - ] smartmontools
[ + ] smbd
[ ? ] speech-dispatcher
[ - ] ssh
[ - ] sudo
[ + ] udev
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ - ] unattended-upgrades
[ - ] urandom
[ ? ] vboxautostart-service
[ + ] vboxballoonctrl-service
[ + ] vboxdrv
[ + ] vboxweb-service
[ + ] winbind
[ - ] x11-common
这为您提供了系统 v 服务的概览 - 如果您有手动启动的自定义应用程序或自定义启动脚本,它们可能不在这里,但这仍然有用。 + 表示正在运行的服务, - 表示已停止的服务, ? 表示未知。 请确保以提升用户身份运行上述两个命令,否则您的结果将不完整。
上述命令将让您了解服务器上正在运行的内容,但无法了解其配置方式或用途。开放端口 80 表示 Web 服务器,但这可能意味着面向公众、内部呈现的 API、意外安装的 httpd 或任何此类配置。理想情况下,您需要与架构师讨论以更好地了解每台服务器的用途。
答案2
您需要澄清“角色”的含义。
如果您看到服务器上正在运行数据库,您可以直接输入“数据库服务器”,但它在您的组织中起什么作用?它确实是数据库服务器,但它是“猫图片存储库”吗?“客户数据库”?“主要目标列表”?
除非“角色”仅仅意味着在服务器上运行的主要应用程序,否则您需要了解它在您的组织中的位置才能给出合理的答案。