paramiko 远程控制介绍

Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录。首先来看一个简单的例子

import paramiko
#实例化ssh客户端
ssh = paramiko.SSHClient()
#创建默认的白名单
policy = paramiko.AutoAddPolicy()
#设置白名单
ssh.set_missing_host_key_policy(policy)
#链接服务器
ssh.connect(hostname = "192.168.2.186", #服务器的ipport = 22, #服务器的端口username = "root", #服务器的用户名password = "123" #用户名对应的密码
)
#远程执行命令
stdin,stdout,stderr = ssh.exec_command("ls")#exec_command 返回的对象都是类文件对象#stdin 标准输入 用于向远程服务器提交参数,通常用write方法提交#stdout 标准输出 服务器执行命令成功,返回的结果  通常用read方法查看#stderr 标准错误 服务器执行命令错误返回的错误值  通常也用read方法
#查看结果,注意在Python3 字符串分为了:字符串和字节两种格式,文件返回的是字节
result = stdout.read().decode()print(result)

这是一段最简单的paramiko的代码,其中比较难理解的就是白名单概念,所谓的白名单就是ssh的know_hosts文件,用来记录paramiko可以信任的远程主机,在

paramiko当中,需要生成和采用两个步骤,来避免在远程链接的时候,被询问是否信任远程登录的服务器。

threaing多线程介绍

想要学习多线程,先要明白:

  进程:是程序的一次运行,我们运行一个程序,就会形成一个进程,进程有独立的内存空间,也被称为重量级进程。

  线程:线程是进程下的一个分支,也被称为轻量级进程。

threading是python多线程的基础模块,也可以说Python程序员接触多线程最初接触的模块,

我们来看一下threading最基础的案例

为了好理解我们来了解前置代码的编写

最简单的例子:

 1 from time import sleep2 #通过这个例子我们来看计算机正常情况下的执行顺序 从左往右,从上到下3 def loop0():4     print("loop 0 is start")5     sleep(3)6     print("loop 0 is down")7 8 def loop1():9     print("loop 1 is start")
10     sleep(2)
11     print("loop 1 is down")
12
13 def main():
14     print("all is start")
15     loop0()
16     loop1()
17     print("all is down")
18
19 if __name__ == "__main__":
20     main()

代码优化过的例子:

from time import sleepdef loop(num,sleeptime):"""当前函数作为功能函数:param num: 函数的编号:param sleeptime:  睡眠的时间"""print("loop %s is start"%num)sleep(sleeptime)print("loop %s is done"%num)def main():sleep_list = [3,2] #睡眠时间lenth = len(sleep_list) #获取列表长度print("all is start") for i in range(lenth):loop(i,sleep_list[i]) #按照列表长度和列表内容调用函数print("all is down")if __name__ == "__main__":main()

多线程调用的例子:

 1 import threading2 from time import sleep3 4 def loop(num,sleeptime):5     """6     当前函数作为功能函数7     :param num: 函数的编号8     :param sleeptime:  睡眠的时间9     """
10     print("loop %s is start"%num)
11     sleep(sleeptime)
12     print("loop %s is done"%num)
13
14 def main():
15     sleep_list = [3,2] #睡眠时间
16     lenth = len(sleep_list) #获取列表长度
17     thread_list = []
18     print("all is start")
19     for i in range(lenth):
20         #threading.Thread 就是用线程来执行我们的功能
21         t = threading.Thread(target = loop,args = (i,sleep_list[i])) #按照列表长度和列表内容调用函数
22         thread_list.append(t) #将生成的线程添加到列表里
23     for t in thread_list:
24         t.start() #开始执行线程
25     for t in thread_list:
26         t.join()  #挂起线程,到所有线程结束
27     print("all is down")
28         

通过上面例子的执行,我们需要掌握以几个点:

  1、threading.Thread方法用来创建线程,线程被创建的时候没有执行,需要通过start方法执行

  2、多线程调用实际上就是把原有的功能发到线程上面去跑,所以我们使用多线程,功能要写成函数

  3、Python的多线程是异步并发,而不是大家理解的并行,在这里

    并发:指的是同时出发,不同时执行

    并行:指的是同时进行,不一定同时出发

  希望各位同学注意上面的三点,而值得大家思考的就是上面代码最后的for循环可以简化吗?为啥?

paramiko+threading 实现远程服务器批量执行命令

完成上面的代码实例,我们进行代码的整合,完成远程服务器批量执行命令的效果

 1 #coding:utf-82 3 import sys4 import paramiko5 import threading6 7 def getConnection(ip,username,password,command,port = 22):8     """9     :param ip: 服务器的ip
10     :param username:  服务器的用户名称
11     :param password:  服务器的密码
12     :param CMD:  服务器的命令
13     :param port:  服务器的端口
14     """
15     ssh = paramiko.SSHClient()
16     policy = paramiko.AutoAddPolicy()
17     ssh.set_missing_host_key_policy(policy)
18     ssh.connect(
19         hostname = ip,  # 服务器的ip
20         port = port,  # 服务器的端口
21         username = username,  # 服务器的用户名
22         password = password  # 用户名对应的密码
23     )
24     stdin, stdout, stderr = ssh.exec_command(command)
25
26     result = stdout.read().decode()
27
28     error = stderr.read().decode()
29
30     print("+++++++++++++++++++++++start++++++++++++++++++++")
31     print("[connect success] | ip : %s" % ip)
32     print("result: \n %s"%result)
33     if error != " ":
34         print("error: \n %s"%error)
35     print("+++++++++++++++++++++++done++++++++++++++++++++")
36
37     ssh.close()
38 #我们采用多线程
39 def main(host_list,command):
40     thread_list = []
41     for ip,username,password in host_list:
42         thread = threading.Thread(target = getConnection, args = (ip,username,password,command))
43         thread_list.append(thread)
44     for t in thread_list:
45         t.start()
46     for t in thread_list:
47         t.join()
48
49
50 if __name__ == "__main__":
51     host_list = [
52         ("192.168.2.186", "root", "123"),
53         ("192.168.2.88", "root", "123"),
54     ]
55     command = sys.argv[1]
56     main(host_list,command)

在这当中,我们使用了sys.argv方法来接收脚本外面执行的参数,当然,我们也可以将host_list写到一个配置文件当中使用。执行效果如下:

Python 实现远程服务器(ssh)批量执行命令相关推荐

  1. python批量运行cmd_python 批量ssh并执行命令

    1.安装paramiko模块 pip install paramiko 可以修改ssh连接超时时间,windows下路径:在安装路径Python\Python36\Lib\site-packages\ ...

  2. pssh远程批量执行命令

    Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上 ...

  3. Scp远程批量执行命令

    一次拷贝多个文件或者目录 # scp root@192.168.9.142:/usr/local/src/cp_dir/*.php /usr/local/src/ //拷贝多个文件 # scp -r ...

  4. pssh批量执行命令

    Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上 ...

  5. 使用sshpass在Linux服务器上批量执行脚本

    用途描述: 如果Linux服务器未配置免密登录,每次使用ssh执行远程脚本时,都需要输入密码. 使用sshpass命令可以在多个Linux服务器上批量执行脚本,操作步骤如下: 1.安装sshpass ...

  6. python脚本连接交换机,自动执行命令。

    python脚本连接交换机,自动执行命令. python脚本连接交换机,自动执行命令,查询交换机端口的学习mac地址,自动写入txt中.设置定时器,每xx秒执行一次,自动对比上次返回结果,TXT中保存 ...

  7. Linux执行命令提示Password,linux expect远程自动登录以及执行命令

    linux远程自动登录以及执行命令 远程登录 该自动登录的过程是通过shell里面expect实现的,类似相当于开了一个类似于cmd的命令段输出IP和密码. 注意该脚本能够执行的前提是安装了expec ...

  8. Go 版批量执行命令工具

    ansible 真的太慢了,而且依赖对端python环境,对于交换机,分流等基于ssh连接的网络设备就没办法了.用的最多的是批量执行命令和下发文件, 我们就借鉴ansible的执行方式,先准备yaml ...

  9. MobaXterm连接远程服务器,使用Linux命令行上传下载文件

    文章目录 一.MobaXterm连接远程服务器 二.Linux命令行上传和下载文件 三.服务器挂载U盘传输文件 四..ipynb文件转化为.py文件 五.关闭本地电脑,服务器运行python 项目 问 ...

最新文章

  1. Angular19 自定义表单控件
  2. mysql php 封装类_市面上几款常见的微信开发框架对比(PHP和JAVA)
  3. 静静守候属于我们的幸福。坚守我们的约定
  4. SICP学习笔记(1.1.4~1.1.5)
  5. Linux下的screen(远程协作的用法)
  6. PostgreSQL 9.2迁移到9.3
  7. python的文件基本操作和文件指针
  8. C++匿名函数Lambda
  9. 用getchar和%C输入字符型数据
  10. 这次都安排上了,零食好物全都 9 块 9 。
  11. oracle创建哈希索引,ORACLE10g新特性——全局HASH分区索引
  12. 什么软件可以在给多个视频添加马赛克同时批量裁剪画面呢?
  13. ora-600[6002]解决
  14. ArcGIS API for JS4.8二维地图状态控制
  15. php手机界面设计,浅析手机界面设计
  16. Python3 shutil(高级文件操作 模块)
  17. 不同波特率传输时间计算
  18. 安装hadoop 问题记录
  19. SQL修改视图中列名和字段长度
  20. Docker镜像瘦身与优化

热门文章

  1. 自娱自乐的FreeRTOS ——简介
  2. 本地k8s环境搭建工具kind、microk8s安装;windows 包管理工具Chocolatey;lens k8s可视化工具
  3. 植物大战僵尸中文年度版
  4. Windows事件日志监控
  5. MDOS Smart Client用户中文手册(含安装、使用、配置)附件配图
  6. OpenCV实战(7)——OpenCV色彩空间转换
  7. 我的大学——学习生活总结
  8. 华为云GPU服务器部署PaddleOCR中英文识别服务
  9. 数字信号处理matlab设计滤波器
  10. 基于C#制作一个飞机大战小游戏