python获取交互式ssh shell的方法

获取交互式SSH shell是实现自动化配置、自动化发布、自动化管理等重要操作的关键。Python作为一种高级编程语言,提供了丰富的模块和工具来帮助我们实现自动化操作。下面是获取交互式SSH shell的方法的完整攻略。

使用paramiko模块获取SSH shell

Paramiko是一个Python库,可以用于SSHv2协议的加密与认证。它支持Python 2.7和Python 3.4及以上版本。使用paramiko模块可以轻松地实现获取SSH shell的操作流程,具体代码如下:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_host', port=22, username='your_username', password='your_password')
chan = ssh.invoke_shell()

while True:
    resp = chan.recv(9999)
    if not resp:
        break
    print(resp.decode('utf-8'))

stdin = chan.makefile('wb')
stdout = chan.makefile('r')

stdin.write(b'your_command\n')
stdout.read()
stdin.close()
stdout.close()
ssh.close()

上面的代码首先使用paramiko的SSHClient建立与目标主机的SSH连接,然后使用invoke_shell()方法获取SSH通道。接着通过makefile()方法获取标准输入输出的通道,最后使用write()方法写入要执行的命令并使用read()方法读取输出结果。

使用pexpect模块获取SSH shell

pexpect是一个Python模块,它是实现自动化交互的强大工具。pexpect可以仿真人的动作来实现与目标系统的交互。这个过程包括发送命令、等待响应、检查输出结果等。具体代码如下:

import pexpect

ssh_newkey = 'Are you sure you want to continue connecting'
hostname = 'your_host'
password = 'your_password'
username = 'your_username'
command = 'your_command'

ssh_conn = pexpect.spawn('ssh ' + hostname + ' ' + command)
ret = ssh_conn.expect([pexpect.TIMEOUT, ssh_newkey, '[P|p]assword:'])
if ret == 0:
    print('Error: ssh connection timeout')
    return None
if ret == 1:
    ssh_conn.sendline('yes')
    ret = ssh_conn.expect([pexpect.TIMEOUT, '[P|p]assword:'])
    if ret == 0:
        print('Error: ssh connection timeout')
        return None
ssh_conn.sendline(password)
ssh_conn.expect('#')
print(ssh_conn.before)

上面的代码首先使用spawn()方法建立与目标主机的SSH连接,然后使用expect()方法等待连接请求的响应。接着通过sendline()方法发送密码和要执行的命令,并使用expect()方法等待命令执行的结果。最后使用before属性读取输出结果。

以上就是使用Python获取交互式SSH shell的方法攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python获取交互式ssh shell的方法 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • pip报错“ValueError: invalid literal for int() with base 10: ‘2.6’”怎么处理?

    当使用pip安装Python包时,可能会遇到“ValueError: invalid literal for int() with base 10: ‘2.6’”错误。这个错误通常是由以下原因之一引起的: 版本号格式不正确:如果版本号格式不正确,则会出现此错误。在这种情况下,需要检查版本号格式是否正确。 版本号包含非数字字符:如果版本号包含非数字字符,则会出…

    python 2023年5月4日
    00
  • windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)

    下面是Windows下安装Python的C扩展编译环境的完整攻略: 一、安装Microsoft Visual C++编译工具 1.首先,我们需要安装Microsoft Visual C++编译工具,可以在Microsoft官网上下载并安装。下载地址:https://visualstudio.microsoft.com/vs/features/cplusplu…

    python 2023年5月13日
    00
  • Python 库 PySimpleGUI 制作自动化办公小软件的方法

    导入PySimpleGUI库 首先,需要在Python中安装PySimpleGUI库。可以使用 pip install PySimpleGUI 命令进行安装。然后,在Python代码中使用import语句导入PySimpleGUI库。 import PySimpleGUI as sg 设计GUI界面 在使用PySimpleGUI制作自动化办公小软件时,首先需…

    python 2023年5月19日
    00
  • python中字典(Dictionary)用法实例详解

    下面是“python中字典(Dictionary)用法实例详解”的完整攻略。 1. 什么是字典? 字典(Dictionary)是Python中一种常用的数据结构,用于存储一组键值对(即一对一的关系)。其中,键(Key)可以是任意不可变类型数据,如字符串、数字或元组等,而值(Value)则可以是任意数据类型,包括数字、字符串、列表、元组、甚至可以是一个字典。相…

    python 2023年5月13日
    00
  • Python时间差中seconds和total_seconds的区别详解

    Python时间差中seconds和total_seconds的区别详解 在使用Python中的datetime库进行时间计算时,经常会遇到计算时间差(timedelta)的情况。其中,timedelta对象拥有seconds属性和total_seconds()方法,它们都可以用来计算时间差。本文将深入解析seconds和total_seconds之间的区别…

    python 2023年6月2日
    00
  • 关于Python中object类特殊方法的解释

    关于Python中object类特殊方法的解释 在Python中,所有的类都是从object类继承而来的。object类是Python中的基类,它定义了一些特殊方法,也称为魔术方法或双下划线方法。这些特殊方法可以被子类重写,以实现自定义的行为。下面是一些常用的object类特殊方法及其解释: __init__(self[, …]) 该方法是类的构造函数,…

    python 2023年5月13日
    00
  • PyGame贪吃蛇的实现代码示例

    PyGame是一款基于Python语言的开源游戏开发库,它非常适合用于开发简单的2D游戏,其中就包括贪吃蛇游戏。在这里,我们将为大家详细讲解如何实现一个PyGame贪吃蛇游戏的完整攻略。 环境设置 在开始之前,我们需要先安装好PyGame库,并设置好游戏窗口的尺寸和背景色等基础环境。具体的代码如下: import pygame from pygame.loc…

    python 2023年5月31日
    00
  • Python如何解决secure_filename对中文不支持问题

    Python中的secure_filename函数是用于生成安全的文件名的函数,但是在处理中文文件名时可能会出现不支持的问题。以下是处理该问题的完整攻略: 将中文文件名转换为拼音 可以使用第三方库PyPI的pyinyin库将中文文件名转换为拼音,在生成文件名时调用secure_filename函数即可。示例代码如下: from pyinyin import …

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部