我的第一个Python随笔

2018-03-02  

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

Python的paramiko模块。

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

  

SSHClient

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

基于用户名密码连接:

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=‘192.168.30.129‘, port=22, username=‘sunqi‘, password=‘43797189‘)

# 执行命令
stdin, stdout, stderr = ssh.exec_command(‘df‘)
# 获取命令结果
result = stdout.read()

# 关闭连接
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=‘43797189‘)#测试机器为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

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

import paramiko

‘‘‘
从windows上传文件到Linux虚拟机
IP地址: 192.168.30.129
端口:22
‘‘‘
host = ‘192.168.30.129‘
port = 22

t = paramiko.Transport((host,port))
t.connect(username="root",password=‘43797189‘,)
sftp = paramiko.SFTPClient.from_transport(t)
target_path = ‘/var/log/windows.log‘
local_path = ‘E:\\sunqi.log‘
sftp.put(local_path,target_path)
t.close()

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

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

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

主机列表:

示例代码:host_dir.py

host_dic = {
    ‘group1‘:{
            ‘C1‘:{‘host‘:‘192.168.30.129‘,‘port‘:22,‘username‘:‘root‘,‘password‘:‘43797189‘},
            ‘C2‘:{‘host‘:‘192.168.30.130‘,‘port‘:22,‘username‘:‘root‘,‘password‘:‘43797189‘},
            ‘C3‘:{‘host‘:‘192.168.30.131‘,‘port‘:22,‘username‘:‘root‘,‘password‘:‘43797189‘}
    },
    ‘group2‘:{
            ‘C4‘:{‘host‘:‘192.168.30.132‘,‘port‘:22,‘username‘:‘root‘,‘password‘:‘43797189‘},
            ‘C5‘:{‘host‘:‘192.168.30.134‘,‘port‘:22,‘username‘:‘root‘,‘password‘:‘43797189‘},
            ‘C6‘:{‘host‘:‘192.168.30.135‘,‘port‘:22,‘username‘:‘root‘,‘password‘:‘43797189‘},
    }
}

运行代码:run_code.py

import threading
import paramiko
import os
from paramiko模块.批量主机管理小项目.host_dir import host_dic

‘‘‘
主机批量管理程序
实现多个主机的同时管理
利用多线程以及paramiko模块
实现多个主机同时执行命令,上传或下载文件
‘‘‘
class host_manage():
    def __init__(self,host,port,username,password):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
    def command(self,cmd):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        ssh.connect(hostname=self.host,port=self.port,username=self.username,password=self.password)
        #cmd = input(">>:")
        stdin, stdout, stderr = ssh.exec_command(cmd)
        result = stdout.read()
        if stdout:
            print(str(result, ‘utf8‘))
        else:
            print(str(stderr.read(), ‘utf8‘))

    def upload(self):
        t = paramiko.Transport(self.host,self.port)
        t.connect(username=self.username,password=self.password)
        sftp = paramiko.SFTPClient.from_transport(t)
        target_path = ‘/var/log/windows.log‘
        local_path = ‘E:\\sunqi.log‘
        sftp.put(local_path,target_path)
        t.close()
        pass
    def download(self):
        pass
def choose_group():
    print(‘可管理主机分组‘)
    for k in host_dic:
        print(k)
        for i in host_dic[k]:
            print(host_dic[k][i])
    group_num = input(‘>>:选择主机编号‘)
    return  group_num
def run():
    num = choose_group()
    print(‘已选组号:%s‘ %num)
    selected = input(">>:输入即将进行的操作:command、upload、download")
    if selected =="command":
        cmd = input(‘>>:请输入要批量操作的命令:‘)
    thread_conut = []
    for i in host_dic[num]:
        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‘])
        if hasattr(func,selected):
            p = threading.Thread(target=getattr(func,selected),args=(cmd,))
            thread_conut.append(p)
            p.start()
    for i in thread_conut:
        i.join()

if __name__ == ‘__main__‘:
    run()

  

原文地址:https://www.cnblogs.com/SunQi-Tony/p/8494908.html

时间: 2024-08-02 06:58:09

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

写一个python的服务监控程序

写一个python的服务监控程序 前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4. 到python站点下载源码.解压到Redhat上.然后执行以下的命令: # ./configure --prefix=/usr/local/python27 # make # make install 这样安装之后默认不会启用Python2.7.须要使用/usr/local/python27/bin/python2.7调用新版本号的python. 而

3. 第一个python程序

学习任何一门语言的第一步,首先要写个'hello world',这算是程序员的一个传统.但在写之前,还有注意几个问题. 首先,python是一门脚本语言,而脚本语言的特点就是:我们写的代码会先由解释器进行编译以后,再去执行.但是当我们的程序运行在操作系统之上时,系统并没有那么智能,能够自动识别出我们要用哪个解释器去解释我们的代码(windows则通过后缀名关联执行程序,所以不用声明也可以,但是我们的代码更多在linux上运行,所以解释器的声明算是必须的),所以,我们必须要声明我们的解释器是什么.

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

python 调 用另一个python 程序

na = int(input("开奖时间(如:20140630): \n")) import time nb =  int(time.strftime("%Y%m%d")) #获取当前时间的年月日 #print (nb) #获取键盘输入 a = True while a:     if nb < na:         import os         os.system("python shuangseqou.py")         

第一个Python代码

今天写了第一个Python代码,很费神,由于空格对齐不对,怎么都运行不出来,不过很激动的是最终在我努力之下,有了结果.还有很感谢大神带我学习了第一个Python项目. 先看代码: #!/usr/bin/python  #if__name__ = "__main__" #print "Hello, World!" #age=10 #name="bill" #print '% s is % d years old'% (name,age) class

每天一个 Python 小程序

@易枭寒 正在 GitHub 写一个 Python 相关的开源项目. 项目地址: https://github.com/Yixiaohan/show-me-the-code (可点击本文最下方的“阅读原文”直接进入) 项目介绍: Python 练习册,每天一个小程序. 当然其中的很多题目对于其他编程语言也是适用的. 想法灵感来源于,学生时代的 100 个 C 语言练习题目. 项目的初衷,旨在让更多的人学习.使用 Python. 而不是像 100 个 C 语言练习题目中某些题目「不实用」,比如说打

第一个Python爬虫脚本

今天看了一下买来的C#项目书,感觉有点不可理喻,简直就是作者用来圈钱的,视频敷衍了事,源代码莫名其妙...唉...不过今天还是学了新东西,是一个Python爬虫脚本,虽说也是云里雾里,但是也算一个小进步,千里之行始于足下么,下面就把代码给贴出来. import urllib.requestimport urllib.parseimport json content = input('please input what you want to translate : ') url = 'http:

对“第一个Python程序”的改进

概述: 本程序主要是模仿<Python核心编程>中3.6节--第一个Python程序,并在其基础上做了一些小的改进,而改进的要求则是来源于第三章的课后练习题. 本篇博客的一个核心问题就是在我们如何避免重复制造轮子. 课本源程序: 这里不对课本上的源程序作过多地讲解,因为课本本身就说得非常清楚而且易懂. 改进需求: 1. 可以创建新的文件: 2. 可以读取新的文件: 3. 可以让用户选择创建或是读取文件. 看到上面的需求,可以你的第一感觉就是,哦,这个太简单了.不就是把之前写过的代码在这里复制粘

第一个 Python 程序 - Email Manager Demo

看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' @author: Techzero @email: [email protected] @time: 2014-4-30 下午1:31:04 ''' import os import sys import cPickle as p class Person: def __init__(self,