有没有办法find谁login到networking上的另一台Linux机器给定的机器名称,而不是只是sshing到该机器和运行who ? 我宁愿直接在Python中的方式,但通过一个命令就可以了。
有很多方法可以做到这一点(其中大部分是不安全的)。 也许你不熟悉ssh可以接受一个可选的命令(它会login,运行命令并注销):
ssh user@host who
如果你设置了一个密钥,你可以在没有密码提示的情况下做到这一点。
如果Linux机器安装了finger守护程序,则可以:
finger @linux_machine
但是, finger现在通常被认为是不安全的,默认情况下通常不可用。
您可以在远程机器上为您设置一个服务,并简单地返回结果。 或者你写一个脚本来完成整个过程。 但是我不明白为什么外面的任何人(机器以外的人)都应该能够访问系统信息而不login(只要login,你可以使用SSH来代替)。
这取决于,需要设置的东西,让你这样做。 一种可能性是“rusers”
如果你的首选是通过python编程实现你的ssh操作,那么你应该看看paramiko,一个本地的Python ssh库。
这里有一个很好的阅读文章
抢
我不知道你怎么能发现这样的事情,而不连接到机器..
你可以在主机上主持一个小型的守护进程,这个守护进程将数据包发送到一个指定的目的地,以警告连接本身..但是一个ssh远程命令是最简单的方法。
简短的回答:除非机器是专门为它设置的。
长答案:机器需要在可以连接到的已知端口上运行服务以查询此信息。 另一种方法是使用pexpect以编程方式ssh进入机器,运行who并parsing结果。
一个棘手的方法是find一种方法来从目录服务中获取信息。 很多人拥有来自ActiveDirectory的授权用户列表/密码pipe理的Enterprise系统。 如果您可以find一种方法将您的问题与Kerberos Ticket Granting Ticket服务以及短期票证配对,那么至less可以推断可能login的人员。如果系统告知目录服务,当用户注销,事情有点容易。
你可能想要“手指”的答案,只是不知道。 哪里出了问题,当它开始时,让用户创build一个$HOME/.finger因为所有types的问题(命名pipe道等)爆发。 另外,finger协议有一些严重的漏洞,允许通常的缓冲区溢出等。一些偏执的人认为,即使列出有效用户的用户ID或用户名也会提供攻击向量。 如果你可以扫描networking寻找系统的主要研究人员使用,这是一个机器可以获得大量的工业间谍材料成熟。
另一个有趣的技巧是当用户连接或断开连接时,让系统通知中央服务。 思考IRC bot,聊天服务器或REST服务。 任何进程都可以定期查找交互式会话,并以单向的方式将信息提交给另一端的应用程序。 然后,这个应用程序会整理这个订阅源,将一个“networking”上的人列表显示给一个网页。 如果这是针对有趣的商业或教育计划,那么可能会非常有趣,因为您甚至可以通过Web应用程序login进来的用户。
我其实看了这个问题,所有的答案都是非python。 我在网上find的最好的东西是psutil。 请参阅Google代码上的文档psutil
首先安装psutil:
pip安装psutil
之后,一切都很简单,例如从terminal运行python控制台:
import psutil psutil.users()
下面是输出: [user(name ='root',terminal ='pts / 0',host ='your-local-host-from-isp.net',started = 1358152704.0)]
只有目标机器知道谁是logget。
如果你不能使用SSH,你需要一些其他服务,你可以有一个服务器要求,或者可以让目标机器通过广播消息或类似的东西通知你。
您可以在要监视的服务器上编写守护程序,该守护程序定期连接到中央服务器,并将此信息发送给它。 也许通过TCP连接到中央数据库,然后只要守护进程运行“who”并通过一些SQL上传数据。