使用Python paramiko模块利用多线程实现ssh并发执行操作

使用Python paramiko模块利用多线程来实现SSH并发执行操作可以提高系统操作效率,尤其是对于需要抓取并处理大量数据的网络和系统管理员而言,这个方法是非常受欢迎的。

下面是使用Python paramiko模块进行SSH并发执行操作的步骤:

  1. 安装paramiko模块:
    在命令行中运行pip install paramiko 命令即可。

  2. 导入libraries
    导入需要用到的库文件

#!/usr/bin/python
import paramiko
import threading
import time
import re
import sys

注释:paramiko用于连接ssh

  1. 创建SSH连接:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port, username, password)
stdin, stdout, stderr = ssh.exec_command(cmd)

注释:使用ssh.connect() 函数来连接SSH,其中ip是远程主机名,port是SSH端口号,username与password是登录SSH的用户名和密码。

STDIN, STDOUT, STDERR 执行该指令之后的输出结果。

  1. 定义线程函数:
def execute(ip, command):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, port=22, username=username, password=password, timeout=5)
    stdin, stdout, stderr = ssh.exec_command(command, timeout=10)
    try:
        print(stdout.read())
    except:
        return 2
    ssh.close()

注释:这段代码定义了一个execute函数,我们可以将其作为一个线程来运行。其中参数ip是服务器IP,command是将要执行的命令。

  1. 创建线程池:
threads = []
for ip in ips:
    t = threading.Thread(target=execute, args=(ip, command))
    threads.append(t)

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()

注释:这段代码中的threads是一个空列表,它用来装线程。在for循环中,我们创建了多个线程,并将它们追加到线程池中。thread.start()函数将该线程启动,thread.join()函数会让主线程等待该线程结束。

这就是使用Python paramiko模块进行ssh并发执行操作的全部步骤。

下面我来提供2个示例:

1.执行一个打印命令

def execute(ip, command):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, port=22, username=username, password=password, timeout=5)
    stdin, stdout, stderr = ssh.exec_command(command, timeout=10)
    try:
        print(stdout.read())
    except:
        return 2
    ssh.close()


ips = ['192.168.1.100', '192.168.1.101']
command = 'echo "hello world"'

threads = []
for ip in ips:
    t = threading.Thread(target=execute, args=(ip, command))
    threads.append(t)

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()
  1. 在远程服务器上创建一个文件夹
def execute(ip, command):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, port=22, username=username, password=password, timeout=5)
    stdin, stdout, stderr = ssh.exec_command(command, timeout=10)
    try:
        print(stdout.read())
    except:
        return 2
    ssh.close()


ips = ['192.168.1.100', '192.168.1.101']
command = 'mkdir testdir'

threads = []
for ip in ips:
    t = threading.Thread(target=execute, args=(ip, command))
    threads.append(t)

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()

这2个示例都是在多个服务器上执行SSH命令的,只需要在ips列表中添加需要连接的主机IP地址即可。

以上是使用Python paramiko模块利用多线程实现SSH并发执行操作的攻略和2个示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python paramiko模块利用多线程实现ssh并发执行操作 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 理论讲解python多进程并发编程

    理论讲解Python多进程并发编程 什么是多进程并发编程 多进程并发编程指的是在同一时间内,有多个进程同时运行,从而达到提高程序执行效率的目的。这种编程方式可以更好的利用多核CPU的能力,提高程序的计算能力和并发性。 如何实现多进程并发编程 Python提供了许多库来实现多进程并发编程,其中最常用的是multiprocessing库。在使用multiproc…

    多线程 2023年5月16日
    00
  • 超详细讲解Linux C++多线程同步的方式

    下面就来详细讲解一下“超详细讲解Linux C++多线程同步的方式”的完整攻略。 如何实现多线程同步 在 C++ 程序中,线程之间的竞争条件是十分常见的一种情况,因此必须采取一些措施来避免这种情况的发生。以下是通过锁和条件变量来实现多线程同步的两种方式。 一、使用锁来实现多线程同步 锁可以帮助控制并发还原竞争。具体来说,当一个线程拥有锁时,任何其他线程都不能…

    多线程 2023年5月17日
    00
  • C#多线程之任务的用法详解

    C#多线程之任务的用法详解 在C#中,线程是常用的处理并发的方式,而任务是一种更高级别的并发编程模式。任务可以让程序员更加方便地实现异步编程,能够更好地利用CPU资源,提高程序的效率。 任务的基本概念 任务是由.NET Framework 4.0引入的一种编程模式,可以用于构建异步、并行的应用程序。任务具有以下特点: 可以在多个线程之间自动地分布和调度; 可…

    多线程 2023年5月16日
    00
  • 带你快速搞定java多线程(3)

    当我们需要处理一些比较消耗时间的操作时,多线程可以提高程序的执行效率,因此实现多线程在Java编程中也显得尤为重要。本文将带你从多方面快速搞定Java多线程,实现多任务并发执行。 1. 创建线程的三种方式 在Java中,创建线程的方式有三种:继承Thread类、实现Runnable接口以及使用线程池。 1.1 继承Thread类 继承Thread类是最简单的…

    多线程 2023年5月17日
    00
  • android实现多线程断点续传功能

    Android实现多线程断点续传功能需要以下步骤: 在AndroidManifest.xml中添加网络读写权限,以便应用程序能够进行网络请求. <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:n…

    多线程 2023年5月16日
    00
  • 示例剖析golang中的CSP并发模型

    以下是详细讲解 “示例剖析golang中的CSP并发模型” 的攻略。 什么是CSP并发模型 CSP (Communicating Sequential Processes),通信顺序进程,是一种并发计算模型,它通过通道(Channel)来实现协程(GoRoutines)间的通讯,类似于管道(Pipe)。 CSP模型的核心概念如下: 进程间通过通道进行通信和同…

    多线程 2023年5月17日
    00
  • Java常见面试题之多线程和高并发详解

    Java常见面试题之多线程和高并发详解 简介 在Java的面试中,多线程和高并发是一个经常被问到的话题。因此,对于这个话题,我们必须掌握一些基本概念和技术来进行面试表现。 多线程和高并发的概念 多线程:在同一个程序中,多个线程能够共享同一个地址空间和文件描述符等类似的全局变量,允许并行运行多个线程。 高并发:指在同一时间内,有很多用户同时访问同一个资源,例如…

    多线程 2023年5月16日
    00
  • Java并发编程Semaphore计数信号量详解

    Java并发编程Semaphore计数信号量详解 介绍 Semaphore(信号量)是一个经典的并发编程工具,被广泛应用于各种应用场景,如资源池、限流等。Semaphore 给予我们对并发调度这个宏观的掌控权。 在 Java 5 中,Semaphore 正式被纳入了 Java 并发包,并成为了并发编程中一个必不可少的类。Semaphore 是一个计数信号量,…

    多线程 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部