自学Python也很长时间了,注册博客园写了第一篇随笔。之前想过很多次,但是始终不知道该怎么开始,内容如何,现在想想,随笔嘛,是自己的想法,也自己的实践,又是自己的锻炼。话不多说,开始今天的正式内容。

Python的paramiko模块。

  paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。  

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:

  1. import paramiko
  2.  
  3. # 创建SSH对象
  4. ssh = paramiko.SSHClient()
  5. # 允许连接不在know_hosts文件中的主机
  6. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  7. # 连接服务器
  8. ssh.connect(hostname='192.168.30.129', port=22, username='sunqi', password='')
  9.  
  10. # 执行命令
  11. stdin, stdout, stderr = ssh.exec_command('df')
  12. # 获取命令结果
  13. result = stdout.read()
  14.  
  15. # 关闭连接
  16. ssh.close()

 

示例代码:

  1. import paramiko
  2.  
  3. ssh = paramiko.SSHClient()
  4. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
  5. ssh.connect(hostname='192.168.30.129',port=22,username='root',password='')#测试机器为Linux虚拟机(CentOS 7
  6. while True:
  7. cmd = input('>>:')
  8. stdin,stdout,stderr = ssh.exec_command(cmd)
  9. result = stdout.read()
  10. if stdout:
  11. print(str(result,'utf8'))
  12. else:
  13. print(str(stderr.read(),'utf8'))
  14.  
  15. ssh.close()

SFTPClient

用于连接远程服务器并执行上传:

  1. import paramiko
  2.  
  3. '''
  4. 从windows上传文件到Linux虚拟机
  5. IP地址: 192.168.30.129
  6. 端口:22
  7. '''
  8. host = '192.168.30.129'
  9. port = 22
  10.  
  11. t = paramiko.Transport((host,port))
  12. t.connect(username="root",password='',)
  13. sftp = paramiko.SFTPClient.from_transport(t)
  14. target_path = '/var/log/windows.log'
  15. local_path = 'E:\\sunqi.log'
  16. sftp.put(local_path,target_path)
  17. t.close()

最后将多线程和这个paramiko模块综合起来写了一个批量主机管理程序

请看到的朋友原谅我的混乱代码规范,我会加倍努力的!

批量主机管理系统远程连接主机实现命令的执行文件的上传下载:

主机列表:

示例代码:host_dir.py

  1. host_dic = {
  2. 'group1':{
  3. 'C1':{'host':'192.168.30.129','port':22,'username':'root','password':''},
  4. 'C2':{'host':'192.168.30.130','port':22,'username':'root','password':''},
  5. 'C3':{'host':'192.168.30.131','port':22,'username':'root','password':''}
  6. },
  7. 'group2':{
  8. 'C4':{'host':'192.168.30.132','port':22,'username':'root','password':''},
  9. 'C5':{'host':'192.168.30.134','port':22,'username':'root','password':''},
  10. 'C6':{'host':'192.168.30.135','port':22,'username':'root','password':''},
  11. }
  12. }

运行代码:run_code.py

  1. import threading
  2. import paramiko
  3. import os
  4. from paramiko模块.批量主机管理小项目.host_dir import host_dic
  5.  
  6. '''
  7. 主机批量管理程序
  8. 实现多个主机的同时管理
  9. 利用多线程以及paramiko模块
  10. 实现多个主机同时执行命令,上传或下载文件
  11. '''
  12. class host_manage():
  13. def __init__(self,host,port,username,password):
  14. self.host = host
  15. self.port = port
  16. self.username = username
  17. self.password = password
  18. def command(self,cmd):
  19. ssh = paramiko.SSHClient()
  20. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
  21. ssh.connect(hostname=self.host,port=self.port,username=self.username,password=self.password)
  22. #cmd = input(">>:")
  23. stdin, stdout, stderr = ssh.exec_command(cmd)
  24. result = stdout.read()
  25. if stdout:
  26. print(str(result, 'utf8'))
  27. else:
  28. print(str(stderr.read(), 'utf8'))
  29.  
  30. def upload(self):
  31. t = paramiko.Transport(self.host,self.port)
  32. t.connect(username=self.username,password=self.password)
  33. sftp = paramiko.SFTPClient.from_transport(t)
  34. target_path = '/var/log/windows.log'
  35. local_path = 'E:\\sunqi.log'
  36. sftp.put(local_path,target_path)
  37. t.close()
  38. pass
  39. def download(self):
  40. pass
  41. def choose_group():
  42. print('可管理主机分组')
  43. for k in host_dic:
  44. print(k)
  45. for i in host_dic[k]:
  46. print(host_dic[k][i])
  47. group_num = input('>>:选择主机编号')
  48. return group_num
  49. def run():
  50. num = choose_group()
  51. print('已选组号:%s' %num)
  52. selected = input(">>:输入即将进行的操作:command、upload、download")
  53. if selected =="command":
  54. cmd = input('>>:请输入要批量操作的命令:')
  55. thread_conut = []
  56. for i in host_dic[num]:
  57. func = host_manage(host=host_dic[num][i]['host'],port=host_dic[num][i]['port'],username=host_dic[num][i]['username'],password=host_dic[num][i]['password'])
  58. if hasattr(func,selected):
  59. p = threading.Thread(target=getattr(func,selected),args=(cmd,))
  60. thread_conut.append(p)
  61. p.start()
  62. for i in thread_conut:
  63. i.join()
  64.  
  65. if __name__ == '__main__':
  66. run()

  

我的第一个Python随笔的更多相关文章

  1. 第一个python程序

    一个python程序的两种执行方式: 1.第一种方式是通过python解释器: cmd->python->进入python解释器->编写python代码->回车. 2.第二种方 ...

  2. 第一个python实例--监控cpu

    #第一个python实例:监控cpu #/bin/bash/env Python from __future__ import print_function from collections impo ...

  3. 一个python爬虫小程序

    起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...

  4. Virtualenv: 一个Python环境管理工具(windown版本)

    1.安装virtualenv 在安装virtualenv之前,我们需要安装至少有一个版本的python:因为virtualenv是python的一个第三方模块,必须基于python环境才能安装: 如果 ...

  5. 3.第一个python程序

    学习任何一门语言的第一步,首先要写个'hello world',这算是程序员的一个传统.但在写之前,还有注意几个问题. 首先,python是一门脚本语言,而脚本语言的特点就是:我们写的代码会先由解释器 ...

  6. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  7. 第一个 Python 程序 - Email Manager Demo

    看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' ...

  8. 【Python脚本】Python创建删除文件-----------我的第一个Python脚本

    Python相对C++和Java来说,是解释性语言,非常适合来编写脚本. 很久之前就开始学习Python的语法了,今天写了第一个Python的脚本,来简化我的一些日常工作. 我平时学习的时候喜欢新建一 ...

  9. Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字

    想要快速的学会一个Python的模块和方法,两个函数必须要知道,那就是dir()和help() dir():能够快速的以集合的型式列出该模块下的所有内容(类.常量.方法)例: #--encoding: ...

随机推荐

  1. 使用jsp完成商品列表的动态显示

    1数据库准备工作 1创建数据库 2 创建product表 代码如下: CREATE TABLE `product` ( `pid` ) NOT NULL, `pname` ) DEFAULT NULL ...

  2. weblogic cluster error-----Could not= open connection with host: 127.0.0.1

    weblogic主机及一台从机启动成功后,在启动从机的时候报错, <BEA-000905> <Could not open connection with host: 127.0.0 ...

  3. javascript array类型用法

    javascript高级编程-Array引用类型用法总结  2016-09-17   |    357 引用类型-Array类型 引用类型是一种数据结构,用于将数据和功能联系起来. 创建对象的方式: ...

  4. preg_match()——php

    第一,让我们看看两个特别的字符:‘^’和‘$’他们是分别用来匹配字符串的开始和结束,以下分别举例说明: "^The": 匹配以 "The"开头的字符串; &qu ...

  5. Windows开启telnet命令

    1.点击开始 → 运行 → 输入telnet,回车. 2.点击启用或关闭Windows功能 3.找到Telnet客户端,勾选,点击确认 4.搞定,测试一下 打开CMD,在出来的DOS界面里,输入tel ...

  6. PostgreSQL Entity Framework 自动迁移

    1.依次添加NuGet包 EntityFramework.Npgsql.EntityFramework6.Npgsql,会自动生成一些配置文件,不过缺少数据库驱动的配置节点: <system.d ...

  7. mybatis学习之高级映射

    一对一映射查询 1.数据库执行脚本: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.7.11-log : Database - db_mybatis *** ...

  8. Java Netty简介

    Netty和Mina是Java世界非常知名的通讯框架.它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户netty.io(http:// ...

  9. C Primer Plus note3

    上面的源代码为什么输入q的时候,程序就会退出呢? while(条件语句),status == 1是条件语句,status只要是非0值的时候,status == 1的条件就满足,程序就会运行while循 ...

  10. 使用powershell 执行脚本,windows默认不允许任何脚本运行

    使用如下命令让PowerShell运行在无限制的环境之下: Set-ExecutionPolicy Unrestricted