通过SSH在Python中监控控制台输出
我想找一种方法,通过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”来继续。
现在我们有了串口控制台,可以监控所有输出,当控制台输出某个预定义的字符串时,我就可以退出了。