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


相关推荐

  • ebpf简介_ebpf编程

    ebpf简介_ebpf编程@TOC[]什么是eBPFeBPF是什么呢?从它的全称“扩展的伯克利数据包过滤器(ExtendedBerkeleyPacketFilter)”来看,它是一种数据包过滤技术,是从BPF(BerkeleyPacketFilter)技术扩展而来的。顾名思义BPF来源于伯克利大学,最早应用于网络数据包过滤器,它比当时最先进的抓包技术快20倍,其主要得利于它的两个设计:内核态引入一个新的虚拟机,所有指令都在内核虚拟机中运行。用户态使用BPF字节码来定义过滤表达式,然后传递给内核

    2022年9月21日
    4
  • 初识python廖雪峰_Python3-廖雪峰学习笔记「建议收藏」

    初识python廖雪峰_Python3-廖雪峰学习笔记「建议收藏」Key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到valuedict是用空间来换取时间的一种方法,用在需要高速查找的地方。dict的key必须是不可变对象通过key计算位置的算法称为哈希算法,要保证hash的正确性,作为key的对象就不能变的对象a的内容是’abc’,是指,a本身是一个变量,它指向的对象的内容才是abc’对于不变…

    2025年7月7日
    4
  • Wi-Fi 2.4G 和 5G 信道列表

    Wi-Fi 2.4G 和 5G 信道列表美洲(FCC)2.412~2.462GHz:11个信道5.15~5.35GHz,5.725~5.825GHz;12个信道中国2.412~2.472GHz:13个信道5.725~5.825GHz:4个信道ETSI2.412~2.472GHz:13个信道5.15~5.35GHz:8个信道5470

    2022年6月6日
    39
  • ZABBIX4.4 安装及配置

    ZABBIX4.4 安装及配置

    2021年5月29日
    84
  • python中列表(list)函数及使用

    python中列表(list)函数及使用序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字-它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表和元组。序列

    2022年7月3日
    32
  • serialversionuid的作用_序列化id有什么用

    serialversionuid的作用_序列化id有什么用publicclassXwjUserimplementsSerializable{ //我们可以在IDEA中进行配置,让其自动生成serialVersionUIDprivatestaticfinallongserialVersionUID=1L;privateintid;privateStringmessage;…

    2025年6月25日
    4

发表回复

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

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