使用SSH 的exec_command() 远端执行命令很方便,但是对于切换用户,切换目录,ssh到另外的单板,或者需要一定时间响应的操作等就比较难以实现了。
比如:
ssh.exec_command("cd /tmp")
ssh.exec_command("ls -l")
执行的结果却不显示/tmp目录下的文件列表
又如:
ssh.exec_command("su - oracle")
这样将导致程序卡死无响应,执行切换用户命令后,ssh模块处于接受报文的阻塞状态,而客户端是收不到回执信息的,也不会终止连接,导致线程处于等待状态
又如:
ssh.exec_command("tcpdump -i eth0")
发送命令后,服务器端执行命令的子进程处于工作状态,不会立即结束返回,发送命令的线程将处于阻塞状等待态,除非某个时刻,在服务器端kill掉了执行命令的子进程,才会返回报文激活当前线程。
当然,用ssh的write方法可能可以解决上述的一些问题,但是不好用类进行封装,实际开发时,对于一般的应用还是将相关的功能封装一下用起来会比较舒服。
下面简单的构造了一个类,封装ssh的发送命令功能。
import paramiko
#定义SSH类
class SSH:
__