我的第一个Python随笔

Posted SunQi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第一个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()

 

  

以上是关于我的第一个Python随笔的主要内容,如果未能解决你的问题,请参考以下文章

我的第一个随笔

我的第一篇随笔-------吹起启程之风

我的第一篇随笔

我的第一篇博客园随笔

javascript 我的第一个Cacher片段

javascript 我的第一个片段