invoke_shell和 exec_command区别
原地址 https://zhuanlan.zhihu.com/p/142353958
区别:invoke_shell使用SSH shell channel,而exec_command使用SSH exec channel
shell channel
在正常情况下,SSH终端客户端(例如PuTTY)会使用shell channel
Shell channel执行登录Shell(就像您使用SSH终端客户端登录一样)。然后,shell程序将显示命令提示符,并等待客户端/用户键入命令。
Shell channel的目的是实现交互式Shell会话。那是很少做的事情。如果这样做,通常会希望使用终端仿真(Paramiko invoke_shell会执行此操作,但实际上可以在不进行终端仿真的情况下打开shell channel)。
exec channel
exec channel的目的是使命令执行自动化。因此,通常您不想使用终端仿真,以避免使用该命令执行诸如分页,着色和主要是交互式确认之类的操作。
exec命令将命令作为“参数”,通过用户的默认shell程序,而不是作为“登录”shell程序,这是主要的不同。当您在命令行上指定要执行的命令时,使用exec channel:
例如:
ssh user@host command
===========================
这些函数也用了,感觉就是command就是发送完指令,连接就会断开。invoke_shell则是长连接,保持状态的那种。

浙公网安备 33010602011771号