【问题标题】:How to get the broadcast messages via Paramiko如何通过 Paramiko 获取广播消息
【发布时间】:2020-08-19 21:50:06
【问题描述】:

我正在尝试通过 paramiko 获取广播消息,以确保操作已完全执行。像这样。

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, 22, user, passwd, timeout=180)
command = 'sleep 3; wall "The system will shutdown in 3 seconds."; sudo nohup shutdown -h now;'
stdin, stdout, stderr = ssh.exec_command(command, timeout=300)
if "The system will shutdown in 3 seconds." in stdout.read().encode('utf-8'):
    print "Command success!!"
else
    print "Command failure!!"

但是,我总是得到一个空输出。如何获得输出?

【问题讨论】:

    标签: python linux shell ssh paramiko


    【解决方案1】:

    广播消息仅发送到交互式会话。

    所以你至少需要将SSHClient.exec_commandget_pty参数设置为True

    也许您甚至必须通过SSHClient.invoke_shell 使用shell 通道。


    虽然实际上,我不明白你为什么要捕获广播。这“确保”了什么?也许检查wall 退出代码之类的方法可能是一种更可靠的方法。

    【讨论】:

    • 这是因为机器会有大量的 SSH 连接,并且有些连接必须在系统关闭或重启之前告诉每个连接关闭。确保墙命令的方法是在其他连接上而不是原来的连接上。