请仔细阅读这个问题。
我在服务器上远程登录,但没有 sudo 权限,但我想在该服务器上创建一个侦听器。这样任何传入的连接都应该显示在我的控制台中,即myname@anyip 控制台。
那我该怎么办呢?
答案1
那么,您想监视服务器的其他用户吗?
如果没有 root 权限,您就无法有效地做到这一点。您可以获得的最接近的结果是netstat -an
重复运行该命令并解析输出。如果系统使用容器或某些其他隔离技术,该netstat
命令可能仅显示容器的连接。在安全强化的服务器上,该netstat
命令甚至可能仅限于管理员。
例如,使用 root 权限,您可以设置一个iptables
日志记录规则,该规则将导致为所有新传入连接创建日志消息。然后,您可以配置 syslog 守护进程将这些消息写入特定文件,或通过网络将它们发送到其他系统。如果您通过网络发送日志消息,那么您必须在您发送消息的系统中设置日志消息的接收器。
在可能有多个用户的服务器上,可能会同时发生大量传入连接。其中一些实际上是同一服务器内进程之间的内部连接;特别是,Java 进程倾向于使用大量“网络”连接在同一服务器内的不同进程之间进行通信。在这种情况下,您正在寻找的信息将隐藏在大量关于对您不重要的连接的消息中。因此,在您的信息请求中提供更具体的信息可能对您有利。
如果我可以问,您需要有关传入连接的信息的原因是什么?也许可以通过其他方式生成适合您特定需求的信息。
例如,如果您需要映射服务器的网络连接以进行某种管理责任的移交,那么您可以首先使用netstat -na -A inet
和netstat -na -A inet6
来识别能够接收传入连接的所有 TCP/UDP 端口。对于 TCP 端口,您只需在LISTEN
状态中查找端口即可;对于 UDP 端口,您必须检查所有列出的端口以确定它们是用于传入还是传出数据包。
一旦您获得了系统上实际活动的服务列表,您就可以排除您不感兴趣的服务;例如,如果服务器从一个托管提供商移交给另一托管提供商,则旧提供商的服务器监控基础设施使用的端口不会很有趣,因为旧提供商可能会在新提供商之前删除其监控实用程序。实际交接时,新的提供商很可能会安装自己的监控工具。
下一步可能是查看感兴趣的服务的日志:如果您可以访问日志并且它们具有您需要的信息,那么这可能是最好的选择。如果您没有必要的访问权限,那么服务器管理员可能会比监视所有传入连接的全面请求更容易接受对特定服务的旧日志进行读取访问的请求。
通过一些脚本编写,您可以在日志中搜索指示传入连接的消息 ( grep
),挑选连接源信息(使用sed
或awk
您喜欢的任何工具),然后删除重复项(sort
后跟uniq
)。通过像这样处理任何现有日志,与仅监视几天的所有传入连接相比,您可能有更好的机会捕获很少发生的连接(例如每周或每月一次)。