Python Paramiko模块中exec_command()和invoke_shell()两种操作区别

 更新时间:2024年02月20日 09:36:17   作者:上海-悠悠  
invoke_shell 使用 SSH shell channel,而 exec_command 使用 SSH exec channel,本文主要介绍了Python Paramiko模块中exec_command()和invoke_shell()两种操作区别,具有一定的参考价值,感兴趣的可以了解一下

前言

Paramiko 是 Python 语言的一个 SSH 客户端。可以远程连接Linux服务器,通过 python 对 Linux 进行操作,可以实现进行对远程服务器进行下载和上传文件操作。

  • exec_command()函数是将服务器执行完的结果一次性返回给你;
  • invoke_shell()函数类似shell终端,可以将执行结果分批次返回,看到任务的执行情况,不会因为执行一个很长的脚本而不知道是否执行成功

exec_command 和 invoke_shell 区别

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则是长连接,保持状态。

exec_command() 操作

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
    hostname='127.1.1.12',
    port=22,
    username='root',
    password='aa**********',
    timeout=5
)

while True:
    cmdline = input("command: ")
    stdin, stdout, stderr = ssh.exec_command(cmdline)
    for row in stdout.readlines():
        row = row.replace('\r', '').replace('\n', '').replace('\t', '')
        print(row)

invoke_shell() 操作

代码示例:

import paramiko

# 建立一个socket
trans = paramiko.Transport(('127.0.1.66', 22))
# 启动一个客户端
trans.start_client()

# 如果使用用户名和密码登录
trans.auth_password(username='root', password='aa********')
# 打开一个通道
channel = trans.open_session()
# 获取终端
channel.get_pty()
# 激活终端,这样就可以登录到终端了,就和我们用类似于xshell登录系统一样
channel.invoke_shell()
results = channel.recv(1024000)
print(f"输出1: {results.decode()}")

channel.send("ll\n")
while True:
    results2 = channel.recv(1024000)
    print(f"输出2: {results2.decode()}")

到此这篇关于Python Paramiko模块中exec_command()和invoke_shell()两种操作区别的文章就介绍到这了,更多相关Python exec_command()和invoke_shell()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python抓取网页中的图片示例

    python抓取网页中的图片示例

    这篇文章主要介绍了python抓取网页中图片的示例,需要的朋友可以参考下
    2014-02-02
  • 详解python3中tkinter知识点

    详解python3中tkinter知识点

    本篇文章给大家分享了关于python3中tkinter的相关知识点以及实例代码,有兴趣的朋友参考下。
    2018-06-06
  • 圣诞节教你用Python绘制爱心圣诞树

    圣诞节教你用Python绘制爱心圣诞树

    圣诞节快要到了,心血来潮,写段代码给大家介绍下基于Python绘制爱心圣诞树的方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-12-12
  • python获取当前文件路径以及父文件路径的方法

    python获取当前文件路径以及父文件路径的方法

    今天小编就为大家分享一篇python获取当前文件路径以及父文件路径的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 详解pytest传递参数的几种方式

    详解pytest传递参数的几种方式

    本文主要介绍了详解pytest传递参数的几种方式,详细的介绍了4种传参方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • Python Web框架Django的模型和数据库迁移详解

    Python Web框架Django的模型和数据库迁移详解

    Django 是一个极其强大的 Python Web 框架,它提供了许多工具和特性,能够帮助我们更快速、更便捷地构建 Web 应用,在本文中,我们将会关注 Django 中的模型(Models)和数据库迁移(Database Migrations)这两个核心概念,需要的朋友可以参考下
    2023-08-08
  • Django使用视图动态输出CSV以及PDF的操作详解

    Django使用视图动态输出CSV以及PDF的操作详解

    这篇文章主要介绍了Django 如何使用视图动态输出 CSV 以及 PDF,我们需要用到 python 的 csv 和 reportLab 库,通过django视图来定义输出我们需要的 csv 或者 pdf 文件,需要的朋友可以参考下
    2024-06-06
  • Python中异常类型ValueError使用方法与场景

    Python中异常类型ValueError使用方法与场景

    这篇文章主要介绍了Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • Python itertools模块详解

    Python itertools模块详解

    这篇文章主要介绍了Python itertools模块详解,本文基本是基于文档的翻译和补充,相当于翻译了,需要的朋友可以参考下
    2015-05-05
  • Python中表示字符串的三种方法

    Python中表示字符串的三种方法

    这篇文章主要介绍了Python中表示字符串的三种方法的相关资料,需要的朋友可以参考下
    2017-09-09

最新评论