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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • %d啥意思java_编程“%d”代表什么意思?

    %d啥意思java_编程“%d”代表什么意思?展开全部%d:表示把数据bai按十进制整型du输出。%o:表zhi示把数据按dao八进制整型版输权出。%x:表示把数据按十六进制整型输出。%u:表示把数据参数按无符号整型输出。%f:显示小数表示的普通浮点数。拓展资料:C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C…

    2022年7月9日
    21
  • java语言_java好学吗?java是不是最难学的语言?

    java语言_java好学吗?java是不是最难学的语言?java好学吗?java是不是最难学的语言?对于一些刚接触java的朋友来说,可能会有这样的疑问,下面就来一起了解下吧。1、java好学吗?  从某些方面来说,java比较容易学,如果是大学毕业,大学计算机专业里大多开设了java基础课程,或者学过一点编程,学起java来也会轻松不少。即使是零基础也不用担心,java可以零基础授课,入门比较简单,难的是学深入,这不是一件容易的事。学习java…

    2022年7月7日
    23
  • 实用的谋生技能_unity给人物模型加动作

    实用的谋生技能_unity给人物模型加动作Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。也可以简单把Unity理解为一个游戏引擎,可以用来专业制作游戏!…

    2022年9月13日
    0
  • android json解析及简单例子

    android json解析及简单例子android2.3提供的json解析类android的json解析部分都在包org.json下,主要有以下几个类:JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本

    2022年7月2日
    20
  • CentOS搭建Ghost博客

    CentOS搭建Ghost博客

    2021年6月1日
    127
  • js解析PSD文件,Java处理psd文件智能图层

    js解析PSD文件,Java处理psd文件智能图层现在市面上很多的webapp都提供模板功能,所谓模板就是一系列元素的集合,模板的制作一般都需要设计师先在Photoshop等软件中制作好设计好,然后再一定的方式来还原设计稿,要么需要编码要么需要在某些应用中按照设计稿重画设计生成模板数据,都还是比较麻烦的,我们能不能通过psd文件直接生成模板呢?要做到这点我们就需要解析psd文件,而psd文件是Photoshop软件的涉及保存文件,浏览器并不能直接识别,所幸的是psd.js赋予了我们这样的能力。foxpsd是一个用来解析PhotoShop的PSD文件的

    2022年6月7日
    189

发表回复

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

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