栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

python --paramiko模块(ssh/sftp)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python --paramiko模块(ssh/sftp)

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

paramiko远程密码连接

import paramiko

##1.创建一个ssh对象
client = paramiko.SSHClient()

#2.解决问题:如果之前没有,连接过的ip,会出现选择yes或者no的操作,
##自动选择yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#3.连接服务器
client.connect(hostname='172.25.254.31',
               port=22,
               username='root',
               password='westos')

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

#5.获取命令执行的结果
result=stdout.read().decode('utf-8')
print(result)

#6.关闭连接
client.close()
使用sftp上传文件
import paramiko

#获取Transport实例
tran = paramiko.Transport("172.25.254.31",22)

#连接SSH服务端
tran.connect(username = "root", password = "westos")

#获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)

#设置上传的本地/远程文件路径
localpath="passwd.html"   ##本地文件路径
remotepath="/home/kiosk/Desktop/fish"   ##上传对象保存的文件路径

#执行上传动作
sftp.put(localpath,remotepath)

tran.close()

使用sftp下载文件

import paramiko

#获取SSHClient实例
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接SSH服务端
client.connect("172.25.254.31",username="root",password="westos")
#获取Transport实例
tran = client.get_transport()
#获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)

remotepath='/home/kiosk/Desktop/fish'
localpath='/home/kiosk/Desktop/fish'

sftp.get(remotepath, localpath)

client.close()

paramiko基于公钥密钥连接

import  paramiko

from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException


def connect(cmd, hostname, port=22, user='root'):

    client = paramiko.SSHClient()  

    private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
     ###id_rsa为本地局域网密钥文件

    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(hostname=hostname,
                       port=port,
                       username=user,
                       pkey=private_key
                      )

        stdin, stdout, stderr = client.exec_command(cmd)
    except NoValidConnectionsError as e:
        print("连接失败")
    except AuthenticationException as e:
        print("密码错误")
    else:

        result = stdout.read().decode('utf-8')
        print(result)
    finally:

        client.close()
for count in range(254):
    host = '172.25.254.%s' %(count+1)
    print(host.center(50, '*'))
    connect('uname', host)

基于密钥的上传和下载

import paramiko
private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
tran = paramiko.Transport('172.25.254.31',22)
tran.connect(username='root',password='westos')
#获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)
remotepath='/home/kiosk/Desktop/fish8'
localpath='/home/kiosk/Desktop/fish1'
sftp.put(localpath,remotepath)
sftp.get(remotepath, localpath)

实战:

import paramiko
from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException


class SSHUtils(object):
    '''
    ssh连接工具
    Eg:
    ssh = SSHUtils(hostname='192.168.1.60', port=50022, username='root', password=' ')
    print(ssh.cmd_run(cmd='ls'))
    '''

    def __init__(self, hostname, port, username, password):
        """
        :param hostname: ip
        :param port: 端口
        :param username: 账号
        :param password: 密码
        """
        self._hostname = hostname
        self._port = int(port)
        self._username = username
        self._password = password

    def cmd_run(self, *, cmd):
        """
        cmd操作
        :returns 返回cmd操作的返回值
        """
        _client = paramiko.SSHClient()
        _client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        try:
            _client.connect(hostname=self._hostname, port=self._port, username=self._username, password=self._password)
            _result = _client.exec_command(str(cmd))
            print(_result)
        except NoValidConnectionsError:
            return '连接失败'
        except AuthenticationException:
            return '账号密码错误'
        return _result[1].read().decode('utf-8')

    def sftp_run(self, location_file_path, obj_file_path, download=False):
        """
        sftp上传文件 或 下载文件
        :param location_file_path: 本地文件路径
        :param obj_file_path: 服务器文件路径
        :param download: 是否下载文件 默认:False
        :return: Null
        """
        tran = paramiko.Transport(self._hostname, self._port)
        tran.connect(username=self._username, password=self._password)
        sftp = paramiko.SFTPClient.from_transport(tran)
        if download:
            sftp.get(obj_file_path, location_file_path)
        else:
            sftp.put(location_file_path, obj_file_path)
        tran.close()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940454.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号