通过python中的ssh监视控制台输出

时间:2014-09-11 17:48:09

标签: python ssh console paramiko

我试图找到一种方法,通过ssh和Python内部来监视删除服务器控制台的输出。

Paramiko和Fabric python模块提供了一种获取ssh连接并在远程服务器上执行特定命令并从这些命令获取输出的好方法。

但是我不想执行任何我想做的事情"屏幕刮擦"所以说所有输出都被吐出到那台机器的控制台上。

可以将Paramiko用于此目的,还是有人知道另一个可以实现此目的的Python实用程序?

1 个答案:

答案 0 :(得分:0)

好的,所以我设法使用SSHClient.invoke_shell()并监视它的输出。 Solaris硬件都配置了ILOM(Integrated Lights Out Manager),这对于在计算机上获取串行控制台非常有用。

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上的服务端口并等待" - >"提示,一旦收到它,通过"启动-script SP / Console"启动串行控制台,然后启动" y"继续提示。

现在我们有串行控制台,可以监控到这个串口控制台的所有输出,当一些预定义的字符串输出到控制台时,我可以退出。