使用Python与远程计算机接口

5 投票
6 回答
4809 浏览
提问于 2025-04-15 13:43

我刚刚成为我研究小组集群的系统管理员,还是个新手。现在我想做一些工具来监控网络,需要一些帮助来用Python(我最熟悉的语言)开始实现这些工具。

比如,我想查看谁登录到了远程机器上。手动操作的话,我会用ssh连接,然后输入who命令,但我该怎么把这些信息放到脚本里去处理呢?类似这样的:

import remote_info as ri
ri.open("foo05.bar.edu")
ri.who()

Out[1]: 
hutchinson tty7         2009-08-19 13:32 (:0)
hutchinson pts/1        2009-08-19 13:33 (:0.0)

还有像cat /proc/cpuinfo这样的命令,用来获取节点的处理器信息。能给我一个起步的建议就太好了。谢谢!

6 个回答

1

pexpect模块可以帮助你与ssh进行交互。大致上,你的例子会是这样的。

child = pexpect.spawn('ssh servername')
child.expect('Password:')
child.sendline('ABCDEF')
(output,status) = child.sendline('who')
2

我一直在使用Pexpect,这个工具可以让你通过SSH连接到其他机器,发送命令,读取输出,并根据输出做出反应,效果很好。其实我还围绕这个工具启动了一个开源项目,叫Proxpect,虽然这个项目已经很久没有更新了,但我有点跑题了...

2

这里有一个简单又便宜的解决方案,可以帮助你入门。

from subprocess import *
p = Popen('ssh servername who', shell=True, stdout=PIPE)
p.wait()
print p.stdout.readlines()

返回的结果(例如):

['usr      pts/0        2009-08-19 16:03 (kakapo)\n',
 'usr      pts/1        2009-08-17 15:51 (kakapo)\n',
 'usr      pts/5        2009-08-17 17:00 (kakapo)\n']

关于cpuinfo的信息:

p = Popen('ssh servername cat /proc/cpuinfo', shell=True, stdout=PIPE)

撰写回答