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


相关推荐

  • OSPF协议总结(1)

    OSPF协议总结(1)

    2021年4月14日
    182
  • python3 byte转string[通俗易懂]

    python3 byte转string[通俗易懂]python3许多stdout的类型是byte。如果想要print,则需要转换一下。p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)(stdout,stderr)=p.communicate()print(stdout.decode("gb2312"))print(s…

    2022年6月16日
    37
  • RPN网络通俗理解

    RPN网络通俗理解【提特征】RPN网络前面是一个提特征的网络,比如VGG,Res等,传给RPN网络的是一个特征图,其实也就是一个tensor比如用ZF网络(论文里面用的)输出特征图:13*13*256【RPN】拿到模型的特征,RPN网络首先加了一个3*3*256*256的卷积层(其实不是很清楚为什么加,可能是为了扩大感受野)这样就会得到11*11*256的输出,前面11*11是图形矩阵,其中每一个点在原图中都是一个…

    2022年6月23日
    36
  • 一道线程同步面试题

    一道线程同步面试题

    2021年11月13日
    42
  • QCustomPlot使用心得五:坐标轴常用属性设置[通俗易懂]

    QCustomPlot使用心得五:坐标轴常用属性设置[通俗易懂]先看轴部分的名称约定,根据名称就可以修改对应的属性了1.显示坐标轴默认只显示左y轴和下边的x轴,调用setVisible(bool)设置轴是否显示customplot->yAxis2->setVisible(true);//显示y轴2customplot->xAxis2->setVisible(true);//显示x轴2调用se…

    2022年10月16日
    2
  • 华为模拟器eNSP下载与安装教程(面向小白)「建议收藏」

    华为模拟器eNSP下载与安装教程(面向小白)「建议收藏」本人是电脑操作系统是win10企业版,不同操作系统,可能会有所不同。目前许多人对学习华为的网络设备十分感兴趣,但安装华为模拟器eNSP是必不可少的。下载地址:链接:https://pan.baidu.com/s/1XqSfHetChnmiaNtHpjS1oA提取码:4455PS:可能部分电脑在安装之前需要提前关闭防火墙1.打开下载好的安装包选择中文(简体),直接按确定即可2.进入安装向导3.点击“我愿意接受此协议”后,点击下一步4.选择合适的安装路径后,.

    2022年10月14日
    4

发表回复

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

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