Python 学习笔记 – Paramiko 模块

Python 学习笔记 – Paramiko 模块

大家好,又见面了,我是全栈君。

Python提供了一个Paramiko模块,允许我们通过SSH 对远程系统进行操作,上传和下载文件。他的使用很直观,下面直接看例子。

例1

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author Yuan Li
import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='host', port=22, username='root', password='123')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -hT')
# 获取命令结果
result = stdout.read()
print(result.decode())
# 关闭连接
ssh.close()
----------
"C:\Program Files\Python3\python.exe" C:/Users/yli/pycharmprojects/Exercise/Week12/paramiko_test.py
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        28G  6.5G   22G  24% /
devtmpfs                devtmpfs  988M     0  988M   0% /dev
tmpfs                   tmpfs     998M   80K  998M   1% /dev/shm
tmpfs                   tmpfs     998M  112M  887M  12% /run
tmpfs                   tmpfs     998M     0  998M   0% /sys/fs/cgroup
/dev/sda1               xfs       497M  169M  329M  34% /boot
tmpfs                   tmpfs     200M   12K  200M   1% /run/user/42
tmpfs                   tmpfs     200M     0  200M   0% /run/user/0

如果看看ssh.connect()这个方法的源码,我们可以看见他实际上调用的是Transport这个类的方法。因此我们可以直接使用Transport来创建一个session,然后进行连接,效果和上面是一样的。

例2

import paramiko
#创建一个transport session
transport = paramiko.Transport(('sydnagios', 22))

#连接session
transport.connect(username='root', password='Goat2015')
ssh = paramiko.SSHClient()
ssh._transport = transport

#执行命令
stdin, stdout, stderr = ssh.exec_command('df')
print (stdout.read().decode())

#创建sftp的对象
sftp=paramiko.SFTPClient.from_transport(transport)

#上传
sftp.put('c:\\temp\\aaa.txt','/tmp/aaa.txt')

#下载
sftp.get('/tmp/aaa.txt','c:\\temp\\bbb.txt')
transport.close()
----------
"C:\Program Files\Python3\python.exe" C:/Users/yli/pycharmprojects/Exercise/Week12/paramiko_test.py
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        28G  6.5G   22G  24% /
devtmpfs                devtmpfs  988M     0  988M   0% /dev
tmpfs                   tmpfs     998M   80K  998M   1% /dev/shm
tmpfs                   tmpfs     998M  112M  887M  12% /run
tmpfs                   tmpfs     998M     0  998M   0% /sys/fs/cgroup
/dev/sda1               xfs       497M  169M  329M  34% /boot
tmpfs                   tmpfs     200M   12K  200M   1% /run/user/42
tmpfs                   tmpfs     200M     0  200M   0% /run/user/0

例3,我们可以完善一下例2,把这么操作都封装到自定义的类里

import paramiko
import uuid
class SSHConnection(object):

    #初始化封装字段
    def __init__(self, host='sydnagios', port=22, username='root',pwd='123'):
        self.host = host
        self.port = port
        self.username = username
        self.pwd = pwd
        self.__k = None
    #连接session,执行操作,断开session
    def run(self):
        self.connect()
        pass
        self.close()
    #连接
    def connect(self):
        transport = paramiko.Transport((self.host,self.port))
        transport.connect(username=self.username,password=self.pwd)
        self.__transport = transport
    #断开
    def close(self):
        self.__transport.close()
        
    #执行命令    
    def cmd(self, command):
        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        # 执行命令
        stdin, stdout, stderr = ssh.exec_command(command)
        # 获取命令结果
        result = stdout.read()
        return result
    def upload(self,local_path, target_path):
        # 连接,上传
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        # 将location.py 上传至服务器 /tmp/test.py
        sftp.put(local_path, target_path)
ssh = SSHConnection()
ssh.connect()
r1 = ssh.cmd('df')
print(r1.decode())
ssh.upload('c:\\temp\\aaa.txt', "/home/yli/s7.py")
ssh.close()
----------
"C:\Program Files\Python3\python.exe" C:/s13课上代码/s13day13课上代码/s13day13_课上代码/paramiko模块_demo.py
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  28813572 6760732  22052840  24% /
devtmpfs                  1011616       0   1011616   0% /dev
tmpfs                     1021272      80   1021192   1% /dev/shm
tmpfs                     1021272  113928    907344  12% /run
tmpfs                     1021272       0   1021272   0% /sys/fs/cgroup
/dev/sda1                  508588  172604    335984  34% /boot
tmpfs                      204256      12    204244   1% /run/user/42
tmpfs                      204256       0    204256   0% /run/user/0

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108767.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 来自科学网博主的问候

    来自科学网博主的问候

    2021年8月24日
  • web服务:Nginx和Apache的区别

    web服务:Nginx和Apache的区别一、Nginx特点1、轻量级,采用C进行编写,同样的web服务,会占用更少的内存及资源。  2、抗并发,nginx以epollandkqueue作为开发模型,处理请求是异步非阻塞的,负载能力比apache高很多,而apache则是阻塞型的。在高并发下nginx能保持低资源低消耗高性能,而apache在PHP处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。  …

    2022年6月1日
  • endnote x9中文版安装教程_vivo怎么强制安装软件

    endnote x9中文版安装教程_vivo怎么强制安装软件一、下载在百度中搜索“Endnotex9”,点第一个链接进入下载页面。软件大小为108MB,下载的是一个压缩包,如下图所示,双击解压之后是右侧的图标,解压到文件夹,双击即可安装。二、安装直接安装即可,可以更换安装路径备注:安装成功后使用汉化版,可以将CHS文件夹里的[EndNote.exe]拷贝到EndNote的安装目录下。使用英文版,可以将ENG文件夹里的[EndNote.exe]拷贝到EndNote的安装目录下。不论用的是英文版还是中文版,替换之后即可使用…

    2022年10月11日
  • PDF转Word提示页数太多转换失败怎么办?

    PDF转Word提示页数太多转换失败怎么办?将PDF转换成Word是我们日常工作中经常会用到的,但有些时候转换时却提示页数太多无法转换,强行转换也总是失败,这是怎么回事呢?要怎么才能转换呢?一般普通的文档只有几十页多一些几百页,但是也有少部分文档比如一些数据统计、文献资料等可能多达几千页,而市面上一般超过500页的PDF文档转换就会报错,那么我们只能将PDF拆分成很多个再转换吗?转换后的Word合并也很难操作吧。所以我们需要更换其他更强大的转换工具,下面分享2个对于文档转换页数没有限制的工具以及各自的使用方法和优缺点。工具一:极速PDF转Wor

    2022年6月9日
  • MySQL修改数据表名

    MySQL修改数据表名修改数据表,包括:修改表名、修改字段名、修改字段的数据类型等。MySQL中,修改数据表的操作都是使用ALTERTABLE修改表名ALTERTABLE旧表名RENAME[TO]新表名;说明其中,TO是可选的,有没有都可以。首先,查看数据库中所有的表修改表名检查是否修改成功

    2022年5月31日
  • 转自某大神的android开发快捷键

    转自某大神的android开发快捷键

    2021年8月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号