使用python实现ssh登陆——python验证远程机的ssh是否连通

22 篇文章 1 订阅
18 篇文章 1 订阅

使用python的paramiko包可以登陆远程机网络设备(只要该机器支持ssh登陆),并对远程机进行shell命令操作,因此可以使用paramiko来验证远程机的ssh是否连通。

具体代码示例如下:

#! /usr/bin/python

import commands
import threadpool
import time
import paramiko


# config
# thread config
thread_num = 40
# ssh config
ssh_port = 22
ssh_username = r'xxxxxx'
ssh_password = r'xxxxxx'

# input file
ips_file = './ips.txt'

# output file
ssh_success_file = './ssh_success.txt'
ssh_faild_file = './ssh_faild.txt'

# output
success_list = list()
faild_list = list()


with open(ips_file, 'r') as fip:
    ips = [x.replace('\n', '').replace('\r', '') for x in fip.readlines()]
    ips = [ip for ip in ips if ip is not '' and ip is not None]

def domain(ip):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(hostname=ip, port=ssh_port, username=ssh_username, password=ssh_password, timeout=5, look_for_keys=False, allow_agent=False)
        success_list.append(ip)
    except Exception as e:
        print e
        faild_list.append((ip, e))
    finally:
        client.close()


if __name__ == '__main__':
    pool = threadpool.ThreadPool(thread_num)
    requests = threadpool.makeRequests(domain, ips)
    [pool.putRequest(req) for req in requests]
    pool.wait()
    with open(ssh_success_file, 'w') as fs:
        for ip in success_list:
            fs.write(ip + '\n')
    with open(ssh_faild_file, 'w') as ff:
        for ip, e in faild_list:
            ff.write(str(ip) + ',' + str(e) + '\n')

由于控制端往往是要控制多台设备,所以这里使用多线程的方式。具体可参考《python实现多线程发送网络请求——基础模板》

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python multiprocessing 模块主要是为了实现在单台计算上的并行计算。如果想要在多台计算上进行并行计算,需要使用分布式计算框架,例如 Celery,Dask 或者 Ray 等等。这些分布式计算框架可以将计算任务分发到多个计算节点上执行,并通过网络通信协调和管理这些节点的计算。 下面是使用 Celery 进行分布式计算的一个简单示例: 1. 首先,需要在所有计算节点上安装 Celery 和消息队列中间件,例如 RabbitMQ。可以使用 pip 命令来安装这些依赖: ```bash pip install celery sudo apt-get install rabbitmq-server # 安装 RabbitMQ ``` 2. 定义一个 Celery 任务,例如下面这个示例: ```python from celery import Celery app = Celery('tasks', broker='amqp://guest@localhost//') @app.task def add(x, y): return x + y ``` 这个任务接受两个参数 x 和 y,返回它们的和。 3. 启动 Celery worker,这个命令需要在每个计算节点上运行: ```bash celery -A tasks worker --loglevel=info ``` 这个命令会启动一个 Celery worker 进程,它会连接到消息队列中间件,并等待任务的分发。 4. 在主节点上调用 Celery 任务,例如下面这个示例: ```python from tasks import add result = add.delay(4, 4) print(result.get()) ``` 这个示例首先导入之前定义的 Celery 任务,然后通过调用 add.delay() 来分发任务。这个方法会立即返回一个 AsyncResult 对象,可以通过调用它的 get() 方法来等待任务执行完成并获取结果。 以上是一个简单的 Celery 示例,实际的应用中可能需要更复杂的配置和调试。 ### 回答2: 在多台计算实现Python的多进程并行,可以通过网络通信和分布式计算来完成。以下是一种基本的配置方案: 1. 配置网络:首先确保所有计算连接到同一个局域网或互联网。确保计算之间可以相互通信,例如通过ping命令测试连通性。 2. 安装Python和相关依赖:在每台计算上安装Python解释器,并安装multiprocessing模块。可以使用pip命令安装。同时,还需要安装一些用于网络通信和分布式计算的库,例如socket、pickle和paramiko。 3. 编写代码:编写分布式计算的代码。在代码中使用multiprocessing模块创建多个进程。可以使用进程间通信制,例如Queue或Pipe,来在不同计算之间传递数据。在代码中远程调用其他计算上的函数或方法,可以使用paramiko库来实现。 4. 配置计算间的通信:为了在多台计算之间传输数据,需要为每台计算分配唯一的IP地址。可以使用socket库中的Socket类创建套接字,以实现计算间的通信。也可以使用paramiko库建立SSH连接,并通过该连接发送数据。 5. 启动进程:在每台计算上运行相同的Python脚本,指定不同的参数或环境变量,以区分不同的进程。可以使用命令行方法或分布式计算框架,例如Celery、Dask或Pyro等。 在配置完成后,可以启动计算上的进程并开始并行计算。这些进程将在多台计算上同时运行,并利用分布式计算的能力,提高计算效率。 需要注意的是,配置过程可能因计算操作系统的不同而略有差异。在配置过程中,需根据实际环境进行适当的调整。 ### 回答3: 要在多台计算实现Python的多进程并行,可以使用分布式计算框架来实现,比如`Celery`和`mpi4py`。下面我将分别介绍它们的配置方法。 1. 使用Celery: - 安装Celery:在每台计算使用命令 `pip install celery` 安装Celery库。 - 创建任务:定义一个Python函数作为你的任务,并使用`@task`装饰它,例如: ```python from celery import Celery app = Celery('myapp') @app.task def my_task(arg1, arg2): # 你的任务逻辑代码 return result ``` - 启动Celery worker和broker:在每台计算上执行如下命令启动Celery worker进程: ```bash celery -A myapp worker --loglevel=info ``` 在一台计算上启动一个Celery broker进程(如RabbitMQ或Redis),并在配置中指定broker的位置。 - 调用任务:在你的主程序中调用任务,例如: ```python from myapp import my_task result = my_task.delay(arg1, arg2) # 异步调用任务 ``` 2. 使用mpi4py: - 安装mpi4py:在每台计算上安装mpi4py库,执行命令 `pip install mpi4py`。 - 编写并行程序:使用mpi4py的API在多台计算上编写并行程序,例如: ```python from mpi4py import MPI comm = MPI.COMM_WORLD size = comm.Get_size() rank = comm.Get_rank() if rank == 0: # 主节点逻辑代码 data = ... else: # 从节点逻辑代码 data = ... # 广播数据 data = comm.bcast(data, root=0) # 并行计算 result = ... # 汇总结果 results = comm.gather(result, root=0) ``` - 启动并行程序:在主节点上执行命令 `mpirun -n <num_processes> python my_program.py` 启动并行程序,其中`<num_processes>`为节点数量。 以上是使用Celery和mpi4py两种方法在多台计算实现Python的多进程并行的简要说明。具体的配置和代码实现还需要根据你的具体需求和环境来进行详细调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值