通过SSH在Python中监控控制台输出

2 投票
1 回答
3688 浏览
提问于 2025-04-21 04:01

我想找一种方法,通过SSH监控远程服务器的控制台输出,并且是在Python里面进行的。

Paramiko和Fabric这两个Python模块可以很好地建立SSH连接,执行远程服务器上的特定命令,并获取这些命令的输出。

不过,我并不想执行任何命令,我只是想“抓取”一下那个机器上控制台输出的所有内容。

请问Paramiko能用来做这个吗?或者有没有其他的Python工具可以实现这个功能?

1 个回答

1

好的,我用SSHClient.invoke_shell()这个方法搞定了这个问题,并且监控它的输出。Solaris硬件上都配置了ILOM(集成远程管理),这对获取机器的串口控制台非常有用。

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("9.9.9.9", 22, "username", "password")
channel = client.invoke_shell()
channel.settimeout(0.0)

while True:
    r, w, e = select.select([channel], [], [])
    try:
        console_data = ""
        while channel.recv_ready():
            console_data += channel.recv(1024)
        if len(console_data) == 0:
           print "\n*** EOF\n"
           break

        # Search console_data for console prompt
        # If found, start a serial console
        if re.search("->", console_data):
            channel.send("start -script SP/Console")
        elif re.search("y/n", console_data):
            channel.send("y\n")
        elif re.search("SOME STRING ON CONSOLE", console_data):
            print "Action completed"
            break
    except socket.timeout:
        pass
channel.close()
client.close()

上面的代码连接到ILOM的服务端口,并等待出现"->"的提示,一旦收到这个提示,就通过“start -script SP/Console”命令启动串口控制台,然后回答“y”来继续。

现在我们有了串口控制台,可以监控所有输出,当控制台输出某个预定义的字符串时,我就可以退出了。

撰写回答