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)
上一篇 2022年2月22日 下午7:00
下一篇 2022年2月22日 下午7:00


相关推荐

  • 小米红米6Pro解BL锁教程申请BootLoader解锁教程

    小米红米6Pro解BL锁教程申请BootLoader解锁教程*小米红米6Pro线刷兼救砖_解账户锁_纯净刷机包_教程*远程解锁一、准备工作1、注册小米账号:点击注册(已有小米账号请忽视)2、在手机中登陆【小米账号】3、下载并解压【小米解锁工具】或点击这里下载安装二、开始解锁1打开【小米解锁官网】:http://www.miui.com/unlock/,点击【立即解锁】,输入【小米账号】,点击【立即登录】,填写…

    2022年6月11日
    49
  • raid卡电池

    raid卡电池raid 卡上的电池只是给卡上的 RAM 供电 RAM 是 raid 卡上的一块芯片 新一代产品 会将 RAM 里的数据写到 flash 里保存 PCI E 给 riad 卡供电 卡上的电池也通过 PCI E 的电源充电 电池再给 RAM 供电 raid 卡是通过 PCI E 接口插在主板上的 PCI E 接口可以供电 一般电池如果出了问题或者没电 raid 控制器会关闭写缓存性能变差 如果没有关闭写缓存 那么当断电情况下 缓

    2026年3月19日
    2
  • GLM-4.5发布,全网最全测评和使用教程来了!

    GLM-4.5发布,全网最全测评和使用教程来了!

    2026年3月16日
    2
  • 仅仅需手动添加一行代码就可以让Laravel4执行在SAE (v. 1.0.0)[通俗易懂]

    仅仅需手动添加一行代码就可以让Laravel4执行在SAE (v. 1.0.0)

    2022年1月28日
    44
  • PINN学习与实验(二)

    PINN学习与实验(二)目录所用工具数学方程模型搭建所有实现代码结果展示参考文献今天第二天接触 PINN 用深度学习的方法求解 PDE 看来是非常不错的方法 做了一个简单易懂的例子 这个例子非常适合初学者 跟着教程做了一个小 demo 大家可以参考参考 本文代码亲测可用 直接复制就能使用 非常方便 所用工具使用了 python 和 pytorch 进行实现 python3 6toch1 10 数学方程使用一个最简单的常微分方程 ut u ux w uxx 0 1 u 0 x sin x 2 u t 1 0 3 u

    2026年3月19日
    2
  • 小程序常用的生命周期_小程序组件的生命周期

    小程序常用的生命周期_小程序组件的生命周期小程序的生命周期说白了就是指程序从创建、到开始、暂停、唤起、停止、卸载的过程。我们大概从三个角度看一下小程序的生命周期。(1):应用生命周期(2):页面生命周期(3):应用生命周期影响页面生命周期一:应用生命周期放一张从网上找的图:1:用户首次打开小程序,触发onLaunch(全局只触发一次)。:2:小程序初始化完成后,触发onShow方法,监听小程序显示。3:小程序从前台进入后台,触发onHide方法。:4:小程序从后台进入前台显示,触发onShow方法。5:小程序后台运行一

    2025年7月28日
    4

发表回复

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

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