通道(Channel)类是对SSH2 Channel的抽象类,是跨SSH传输的安全隧道。隧道的作用类似于套接字,并且与Python套接字API十分类似。因为SSHv2协议有一种流动窗口控制机制,如果停止从一个通道读取数据,并且这个通道的缓冲区已满,那么服务器将不会往此通道发送任何数据,但是并不会影响同一传输上的其他通道(单个传输上的所有通道都是独立的流量控制通道)。类似地,如果服务器没有读取客户端发送的数据,那么客户端的发送调用可能会阻塞,除非设置了超时,这与正常的网络套接字完全一致。通道Channel类的实例常用于上下文管理。
通道(Channel)类提供的方法中常用的有以下几个。
(1)close():关闭Channel,关闭后任何对Channel的读写操作均会失败。远程节点将不能接收数据。Channel在传输完成或垃圾收集时自动关闭。
(2)exec_command(*args,**kwds):在服务端执行命令,如果服务器许可,则Channel将直接连接所执行命令的标准输入、标准输出及标准错误输出。当命令执行完毕后,Channel将被关闭,并不再复用。如果想执行另外一个命令,则需要新开一个Channel。当请求服务器被拒绝或Channel被关闭时,将抛出SSHException异常。
(3)exit_status_ready():该方法检查服务端进程是否退出,如果进程已经执行完并退出,则返回True,否则返回False。当程序不想在recv_exit_status方法中阻塞时,可以用此方法来拉取进程状态。



