Python学习—paramiko模块实现简单的ssh与sftp

paramiko模块

paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。

import paramiko

# ssh [email protected]
# 创建一个ssh对象
client = paramiko.SSHClient()

#如果第一次连接陌生的IP,自动选择yes确认连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器
client.connect(hostname=‘111.231.215.66‘,port=22,username=‘手动屏蔽帐号‘,password=‘手动屏蔽密码‘)

# 执行操作
stdin,stdout,stderr = client.exec_command(‘hostname‘)

# 获取命令执行结果
host = stdout.read().decode(‘utf-8‘).strip()
print(host)

while True:
    command = input("[[email protected]%s]# " %host)
    if command == ‘exit()‘:
        break
    else:
        r = client.exec_command(command)[1].read().decode(‘utf-8‘)
        print(r)

# 关闭连接
client.close()

例子1:

连接文件 主机信息.txt 中的所有主机

不能连接返回连接失败,成功连接,返回其主机名
把连接情况写入文件。

import paramiko

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def ssh_info(ip,port=22,user=‘root‘,passwd=‘westos‘):
    try:
        client.connect(hostname=ip,port=port,username=user,password=passwd)
        r = client.exec_command(‘hostname‘)[1].read().decode(‘utf-8‘)
    except:
        print(‘连接失败......‘)
        return ‘连接失败......‘
    else:
        client.close()
        print(‘连接成功......‘,‘\n主机名:%s‘ %r)
        return ‘连接成功......‘+‘\n主机名:%s‘ %r

with open(‘连接状况.txt‘,‘w‘) as f,open(‘主机信息.txt‘) as p:
    for line in p:
        line = line.strip()
        ip, port, user, passwd = line.split(‘:‘)
        s = ‘ 正在连接%s ‘.center(30, ‘+‘) % ip
        f.write(s+‘\n‘)
        f.write(ssh_info(ip,port,user,passwd)+‘\n‘)

例子2:

基于公钥私钥的批量连接

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def ssh_info(ip,pkey,port=22,user=‘root‘):
    try:
        print(‘ 正在连接%s ‘.center(30, ‘+‘) % ip)
        client.connect(hostname=ip,port=port,username=user,pkey=pkey)
        r = client.exec_command(‘hostname‘)[1].read().decode(‘utf-8‘)
    except:
        print(‘连接失败......‘)
    else:
        client.close()
        print(‘连接成功......‘,‘\n主机名:%s‘ %r)

pkey = paramiko.RSAKey.from_private_key_file(‘id_rsa‘)

for i in range(254):
    ip = ‘172.25.254.‘+str(i+1)
    ssh_info(ip,pkey)

例子3:

基于公钥私钥的上传下载

import  paramiko

private_key = paramiko.RSAKey.from_private_key_file(‘id_rsa‘)

transport = paramiko.Transport((‘172.25.254.39‘, 22))
transport.connect(username=‘root‘,pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)

#上川下载
sftp.put(‘/tmp/kiosk‘, ‘/mnt/kiosk2‘)
sftp.get(‘/mnt/kiosk2‘, ‘/home/kiosk/Desktop/day18/kiosk‘)

transport.close()

paramiko综合练习实例1

import os
import paramiko

group = [file.rstrip(‘.conf‘) for file in os.listdir(‘host‘)]
print(‘主机组‘.center(30,‘+‘))
for i,g in enumerate(group):
    print(‘\t‘,str(i+1),‘\t‘,g)
choice = input(‘选择操作组:‘)

print(‘主机‘.center(30,‘+‘))
host_info_list = []     # 存储文件中主机信息
file = ‘host/‘+choice+‘.conf‘
with open(file) as f:
    for line in f:
        line =line.split(‘:‘)
        print(‘\t‘,line[0])
        host_info_list.append(line)

def do_cmd(cmd,hostname,port=22, username=‘root‘, password=‘westos‘):
    print(‘连接主机 ‘,hostname)
    try:
        client.connect(hostname, port, username, password)
        stdin, stdout, stderr = client.exec_command(cmd)
        result = stdout.read().decode(‘utf-8‘).strip()
    except:
        print(‘连接失败......‘)
    else:
        client.close()
        print(result)

def get_put(cmd,hostname,port=22, username=‘root‘, password=‘westos‘):
    print(‘连接主机 ‘, hostname)
    try:
        transport = paramiko.Transport((hostname, int(port)))
        transport.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(transport)
    except:
        print(‘连接失败......‘)
    else:
        # 上川下载
        if cmd[0] == ‘put‘:
            sftp.put(cmd[1], cmd[2])
            print(‘上传成功......‘)
        elif cmd[0] == ‘get‘:
            sftp.get(cmd[1], cmd[2])
            print(‘下载成功......‘)
        else:
            print(‘暂时没有这个命令的操作......‘,cmd[0])
        transport.close()

while True:
    cmd = input(‘>>>: ‘)
    cmd = cmd.split()
    if cmd == []:
        continue
    elif len(cmd) == 1:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        for host in host_info_list:
            do_cmd(cmd[0],host[0],host[1],host[2],host[3])
    else:
        for host in host_info_list:
            get_put(cmd,host[0],host[1],host[2],host[3])

paramiko封装实例1:

import os
import paramiko

class SSH_host:
    def __init__(self,ip,port,u,p,cmd):
        self.ip = ip
        self.port = port
        self.username = u
        self.passwd = p
        self.cmd = cmd

    def cmd(self):
        print(‘连接主机 ‘,self.ip)
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        try:
            client.connect(self.ip, self.port, self.username, self.passwd)
            stdin, stdout, stderr = client.exec_command(self.cmd[0])
            result = stdout.read().decode(‘utf-8‘).strip()
        except:
            print(‘连接失败......‘)
        else:
            print(result)
        client.close()

    def get(self):
        print(‘连接主机 ‘, self.ip)
        try:
            transport = paramiko.Transport((self.ip, self.port))
            transport.connect(self.username, self.passwd)
            sftp = paramiko.SFTPClient.from_transport(transport)
        except:
            print(‘连接失败......‘)
        else:
            sftp.get(self.cmd[1], self.cmd[2])
            print(‘下载成功......‘)
            transport.close()

    def put(self):
        print(‘连接主机 ‘, self.ip)
        try:
            transport = paramiko.Transport((self.ip, self.port))
            transport.connect(self.username, self.passwd)
            sftp = paramiko.SFTPClient.from_transport(transport)
        except:
            print(‘连接失败......‘)
        else:
            sftp.put(self.cmd[1], self.cmd[2])
            print(‘上传成功......‘)
            transport.close()

if __name__ == "__main__":
    group = [file.rstrip(‘.conf‘) for file in os.listdir(‘host‘)]
    print(‘主机组‘.center(30,‘+‘))
    for i,g in enumerate(group):
        print(‘\t‘,str(i+1),‘\t‘,g)
    choice = input(‘选择操作组:‘)

    print(‘主机‘.center(30,‘+‘))
    host_info_list = []     # 存储文件中主机信息
    file = ‘host/‘+choice+‘.conf‘
    with open(file) as f:
        for line in f:
            line =line.split(‘:‘)
            print(‘\t‘,line[0])
            host_info_list.append(line)

    while True:
        cmd = input(‘>>>: ‘)
        cmd = cmd.split()
        for host in host_info_list:
            link = SSH_host(host[0], int(host[1]), host[2], host[3], cmd)
            if cmd == []:
                continue
            else:
                if hasattr(link, cmd[0]):
                    print(cmd[0])

原文地址:http://blog.51cto.com/13885935/2174984

时间: 2024-11-09 12:22:30

Python学习—paramiko模块实现简单的ssh与sftp的相关文章

python(paramiko模块的简单使用)

#通过paramiko模块连接主机运行bash命令 import paramiko hostname = '192.168.88.31' port = 22 username = 'root' password = '123' ssh = paramiko.SSHClient() #创建ssh对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_hosts文件中的主机 ssh.connect(hostna

使用python的Paramiko模块登陆SSH

paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块可以方便的实现ssh登录,并执行命令. 1. paramiko模块安装 1.1安装pycrypto库 下载地址请戳这里:http://download.csdn.net/detail/oatnehc/8825715: pycrypto库的主页在这里:https://www.dlitz.net/software/pycrypto/ pycrypto库

Python之paramiko模块和SQL连接API

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con

Python中paramiko模块在linux运维中应用

python的paramiko模块可以实现ssh客户端的功能,使用起来也比较简单.但是当服务器非常多的时候,每台服务器上执行完全相同的简单操作,也会花费大量的时间. 下载模块:paramiko.tar.gz使用tar解压后在cd到目录下最后使用rpm安装 rpm -ivh * import paramiko //导入paramiko模块host='192.168.x.xx' //需要远程管理的主机ip ssh=paramiko.SSHClient() //相当于点开xshellssh.set_m

Python学习--Selenium模块学习(2)

Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制浏览器访问URL browser.get(https://www.baidu.com/)   find系列函数定位元素 - `find_element_by_xxx` 返回第一个符合条件 `WebElement` - `find_elements_by_xxx` 返回符合条件所有元素包含了`WebE

python学习--创建模块

昨天做了python客户端和服务器端通信,并把接收到的信息写到数据库,因为对数据库进行操作是个经常调用的行为,所以我想把调用数据库的操作写成一个module来给其它python程序调用,所以将昨天的服务器端程序拆分为两个文件: 1.主程序python.py #!/usr/bin/env python import socket import json import connmysql s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) h

nodejs学习(模块的简单了解)

1.模块模块(Module)是nodejs最重要的支柱,开发一个具有一定规范的程序不可能只用一个文件, 通常我们需要把各个功能拆分,封装,然后在组合在一起,模块正是为了现在这种方式而诞 生的.在浏览器的javascript中,脚本模块的拆分和组合通常情况下我们都使用Html的 Script标签来实现,但是nodejs给我们提供了require这个函数来调用其他的模块.-----------------------------------------------------------------

Python学习--Selenium模块

1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 原文地址:https://www.cnblogs.com/ftl1012/p/seleniumAll.html

windows下python安装paramiko模块和pycrypto模块(简单三步)

前言 Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在python中使用SSH,我们需要先安装pycrypto模块,然后再安装paramiko模块.下面话不多说了,来一起看看详细的介绍: 安装方法 1>首先要确保python安装好,且环境变量设置好.(关于python的安装,本文不再赘述.) 2>安装pycrypto: 到下面这个网站下载编译好的pycrypto(也可以自己到官网下载pycr