Paramiko ssh linux 命令执行没有结果

Paramiko ssh linux command excution produces no result

我正在尝试建立与通过以太网连接到主 raspberrypi 的 raspberrypi(在代码中命名为 slave)的连接。从站 raspberry pi 也有一个静态 IP 地址。

以下代码(即我正在执行的全部代码)尝试从主 raspberrypi 连接到从属 raspberrypi,并发出 "echo hello" 命令。据我所知,我将奴隶连接到屏幕上 "hello" 应该打印在终端上。

import paramiko
import time

slave_ip='169.254.39.236'


def connect():
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    connect(slave_ip, username='pi', password='raspberry')
    ssh_stdin, ssh_stdout, ssh_stderr = ssh_client.exec_command('echo hello') 
    exit_status = ssh_stdout.channel.recv_exit_status()
    print (exit_status)

def main():
    connect()

if __name__ == '__main__':
    while True:
        try:    
            main()
        except:
            pass    

问题:

1- 如何判断登录是否成功?我问这个是因为如果我提供了错误的登录信息或 IP,脚本不会崩溃或 return 错误。

2-假设登录成功,为什么我没有看到命令的输出?

  1. 您看不到错误,因为您在 try 语句中捕获了所有内容,这是一种不好的做法,您应该只捕获要处理的异常

  2. 你的循环将 运行 永远一遍又一遍地执行连接,你不希望那样,而是 运行 它只执行一次,在你知道它正在工作之后做对脚本更有用的东西

  3. 您没有连接,因为您正在递归调用您定义的连接函数,而是调用 ssh_client.connect()

  4. 你不会在 RPi 的连接显示器上看到任何输出,这是因为 ssh 创建了一个独立的会话,如果你想在连接的显示器上看到输出,请尝试 wall linux 命令,或者只是 运行 一个将一些文本输出到标准输出并从 python

  5. 打印的命令

修改后的脚本如下所示:

import paramiko
import time

slave_ip='169.254.39.236'


def connect():
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(slave_ip, username='pi', password='raspberry')
    ssh_stdin, ssh_stdout, ssh_stderr = ssh_client.exec_command('echo hello') 
    exit_status = ssh_stdout.channel.recv_exit_status()
    print(ssh_stdout)

if __name__ == '__main__':
    connect()