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-假设登录成功,为什么我没有看到命令的输出?
您看不到错误,因为您在 try
语句中捕获了所有内容,这是一种不好的做法,您应该只捕获要处理的异常
你的循环将 运行 永远一遍又一遍地执行连接,你不希望那样,而是 运行 它只执行一次,在你知道它正在工作之后做对脚本更有用的东西
您没有连接,因为您正在递归调用您定义的连接函数,而是调用 ssh_client.connect()
你不会在 RPi 的连接显示器上看到任何输出,这是因为 ssh 创建了一个独立的会话,如果你想在连接的显示器上看到输出,请尝试 wall
linux 命令,或者只是 运行 一个将一些文本输出到标准输出并从 python
打印的命令
修改后的脚本如下所示:
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()
我正在尝试建立与通过以太网连接到主 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-假设登录成功,为什么我没有看到命令的输出?
您看不到错误,因为您在
try
语句中捕获了所有内容,这是一种不好的做法,您应该只捕获要处理的异常你的循环将 运行 永远一遍又一遍地执行连接,你不希望那样,而是 运行 它只执行一次,在你知道它正在工作之后做对脚本更有用的东西
您没有连接,因为您正在递归调用您定义的连接函数,而是调用
ssh_client.connect()
你不会在 RPi 的连接显示器上看到任何输出,这是因为 ssh 创建了一个独立的会话,如果你想在连接的显示器上看到输出,请尝试
wall
linux 命令,或者只是 运行 一个将一些文本输出到标准输出并从 python 打印的命令
修改后的脚本如下所示:
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()