iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中paramiko模块的基础操作与排错问题
  • 131
分享到

Python中paramiko模块的基础操作与排错问题

2024-04-02 19:04:59 131人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录关于应用安装示例1.秘钥登陆2.单个命令执行3.执行多个命令4.SFTPClient下载文件5.上传文件6.ssh工具封装补充学习参考关于 python的ssh库操作需要引入一个

关于

python的ssh库操作需要引入一个远程控制的模块——paramiko,可用于对远程服务器进行命令或文件操作。

应用

登陆服务器,问题排查。可用于编写脚本,在服务器上做一些繁琐的重复操作。

安装

打开cmd,输入命令Python -m pip install paramiko

示例

1.秘钥登陆

配置免密登录,linux上信任了windows的公钥,然后脚本在windows上跑,使用windows的私钥就可以直接不要密码登录linux

注意:提供秘钥的paramiko.RSAKey.from_private_key_file('文件'),这里面的"文件"是你本机上的秘钥,不是指你被控机上的公钥哦!

import paramiko

key = paramiko.RSAKey.from_private_key_file("C:\\Users\\liyansheng\\.ssh\\id_rsa")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("connecting")
ssh.connect(hostname="192.168.220.128", username="root", pkey=key)
print("connected")
commands = "uname -a"
stdin, stdout, stderr = ssh.exec_command(commands)
stdin.close()
res, err = stdout.read(), stderr.read()
result = res if res else err
print(result)
ssh.close()

if __name__ == '__main__':
    print()

2.单个命令执行

创建一个.py文件,引入 paramiko模块
import paramiko
  1. 建立SSHClient对象
ssh = paramiko.SSHClient()
  1. 设置可信任,将主机加到host_allow列表
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  1. 创建连接
ssh.connect("150.158.16.123", 22, "wuyanping", "2022")
  1. 创建命令,发送并获取响应结果
 stdin, stdout, stderr = ssh.exec_command("ls /home")
    print(stdout.read().decode("utf-8"))
  1. 关闭连接
ssh.close()

3.执行多个命令

# 执行多条命令,注意传入的参数有个list
def execMultiCmd(host, user, psw, cmds: list, port=22) -> (str, str):
    with paramiko.SSHClient() as ssh_client:
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(hostname=host, port=port, username=user, passWord=psw)
        cmd = ";".join(cmds)
        _, stdout, stderr = ssh_client.exec_command(cmd, get_pty=True)
        result = stdout.read().decode('utf-8')
        err = stderr.read().decode('utf-8')
    return result, err


if __name__ == '__main__':
    cmdList = ["cd /home", "ls"]
    print(execMultiCmd("192.168.220.128", "root", "root", cmdList))

4.SFTPClient下载文件

方法封装:

def down_file(host, user, psw, local_file, remote_file, port=22):
    with paramiko.Transport((host, port)) as transport:
        # 连接服务
        transport.connect(username=user, password=psw)
        # 获取SFTP示例
        sftp = paramiko.SFTPClient.from_transport(transport)
        # 下载
        sftp.get(remote_file, local_file)
        transport.close()

问题:(错误)

if __name__ == '__main__':
    down_file(my_linux.host, my_linux.user, my_linux.psw, "D:\\ssh_download", "/home/test.txt")
Traceback (most recent call last):
  File "D:\MyCode2\py-1\ssh\download.py", line 17, in <module>
    down_file("192.168.220.128", "root", "root", "D:\\ssh_download", "/home/test.txt")
  File "D:\MyCode2\py-1\ssh\download.py", line 11, in down_file
    sftp.get(remote_file, local_file)
  File "D:\MyCode2\py-1\venv\lib\site-packages\paramiko\sftp_client.py", line 810, in get
    with open(localpath, "wb") as fl:
PermissionError: [Errno 13] Permission denied: 'D:\\ssh_download'

正确使用

要指定下载的文件名,不能只是一个目录

if __name__ == '__main__':
    down_file(my_linux.host, my_linux.user, my_linux.psw, "D:\\ssh_download\\test.txt", "/home/test.txt")

5.上传文件

def upload_file(host, user, psw, local_file, remote_file, port=22):
    with paramiko.Transport((host, port)) as transport:
        # 连接服务
        transport.connect(username=user, password=psw)
        # 获取SFTP示例
        sftp = paramiko.SFTPClient.from_transport(transport)
        sftp.put(local_file, remote_file)
        transport.close()

测试同下载,特别要注意路径问题。如

if __name__ == '__main__':
    upload_file(my_linux.host, my_linux.user, my_linux.psw, "D:\\ssh_download\\test123.txt", "/home/test/test123.txt")

6.ssh工具封装

import os

import paramiko


class SSHTool():
    def __init__(self, ip, port, user, psw):
        """
        初始化
        :param ip:
        :param port:
        :param user:
        :param psw:
        """
        self.ip = ip
        self.port = port
        self.user = user
        self.psw = psw

    def connect_ssh(self):
        """
        创建连接
        :return:
        """
        try:
            self.ssh = paramiko.SSHClient()
            self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.ssh.connect(
                hostname=self.ip,
                port=self.port,
                username=self.user,
                password=self.psw
            )
        except Exception as e:
            print(e)
        return self.ssh

    def close_ssh(self):
        """
        关闭连接
        :return:
        """
        try:
            self.ssh.close()
        except Exception as e:
            print(e)

    def exec_shell(self, shell):
        ssh = self.connect_ssh()
        try:
            stdin, stdout, stderr = ssh.exec_command(shell)
            return stdin, stdout, stderr
        except Exception as e:
            print(e)

    def sftp_put_file(self, file, local_dir, remote_dir):
        try:
            t = paramiko.Transport((self.ip, self.port))
            t.connect(username=self.user, password=self.psw)
            sftp = paramiko.SFTPClient.from_transport(t)
            sftp.put(os.path.join(local_dir, file), remote_dir)
            t.close()
        except Exception:
            print("connect error!")

    def sftp_get_file(self, file, local_dir, remote_dir):
        try:
            t = paramiko.Transport((self.ip, self.port))
            t.connect(username=self.user, password=self.psw)
            sftp = paramiko.SFTPClient.from_transport(t)
            sftp.get(remote_dir, os.path.join(local_dir, file))
            t.close()
        except Exception:
            print("connect error!")

补充

获取当前文件路径:os.getcwd()

import os

if __name__ == '__main__':
    print(os.getcwd())  # D:\MyCode2\py-1\ssh

python函数返回多个参数

def get_strs() -> (str, str):
    return "hello", "word"
if __name__ == '__main__':
    # 返回值为元祖的形式
    print(get_strs())  # ('hello', 'word')
    # 获取元祖的个数
    print(len(get_strs()))  # 2
    # 通过下标获取元祖的某一个值
    print(get_strs().__getitem__(1))  # word
    # 通过元祖的某个元素定位对应的下标
    print(get_strs().index("hello"))  # 0

with … as …使用

为了更好地避免此类问题,不同的编程语言都引入了不同的机制。在 Python 中,对应的解决方式是使用 with as 语句操作上下文管理器(context manager),它能够帮助我们自动分配并且释放资源。简单的理解,同时包含 enter() 和 exit() 方法的对象就是上下文管理器。

格式:

with 表达式 [as target]:
    代码块

学习参考

  • Python]远程SSH库Paramiko简介_alwaysrun的博客-CSDN博客_python ssh库
  • Python with as用法详解 (biancheng.net)
  • Python中的with-as用法 - 简书 (jianshu.com)

到此这篇关于Python学习之paramiko模块的基础操作与排错的文章就介绍到这了,更多相关Python paramiko模块内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python中paramiko模块的基础操作与排错问题

本文链接: https://www.lsjlt.com/news/120359.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中paramiko模块的基础操作与排错问题
    目录关于应用安装示例1.秘钥登陆2.单个命令执行3.执行多个命令4.SFTPClient下载文件5.上传文件6.ssh工具封装补充学习参考关于 python的ssh库操作需要引入一个...
    99+
    2024-04-02
  • Python中paramiko模块的作用是什么
    这篇文章给大家介绍Python中paramiko模块的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗...
    99+
    2023-06-14
  • Python中的进程操作模块(multiprocess.process)
    目录一、multiprocess模块二、multiprocess.process模块1、使用process模块创建进程1 在Python中启动的第一个子进程2、 查看主进程和子进程的...
    99+
    2024-04-02
  • Python中的线程操作模块(oncurrent)
    目录GIL锁1、 创建线程的方式:直接使用Thread2、 创建线程的方式:继承Thread二、多线程与多进程1、 pid的比较2、 开启效率的较量3、 内存数据的共享问题三、Thr...
    99+
    2024-04-02
  • 关于python中pika模块的问题
    工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经中间碰到一些问题 的解决方法 刚开写代...
    99+
    2023-01-30
    模块 python pika
  • Python导包模块报错的问题解决
    Python导包模块报错的问题: import报错No module named "xxx"的问题如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接...
    99+
    2024-04-02
  • Mongodb基本操作与Python连接mongodb并进行基础操作的示例分析
    这篇文章主要介绍Mongodb基本操作与Python连接mongodb并进行基础操作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mongodb是基于分布式文件存储的nos...
    99+
    2024-04-02
  • Python中的协程(Coroutine)操作模块(greenlet、gevent)
    目录一、协程介绍1、介绍2、举例3、优点如下:4、缺点如下:5、总结协程特点:二、greenlet(绿叶)模块1、安装模块2、greenlet实现状态切换3、效率对比三、gevent...
    99+
    2024-04-02
  • 解决Python中的“模块未找到错误:没有名为’sklearn’的模块”的问题
    解决Python中的“模块未找到错误:没有名为’sklearn’的模块”的问题 在使用Python时可能会遇到ModuleNotFoundError: No module named ‘sklearn...
    99+
    2023-09-01
    sklearn python 机器学习
  • 关于python中模块和重载的问题
    目录模块和重载模块与命名空间模块和重载 简单来讲,任意一个以.py结尾的python文件都是一个模块。例如有A.py和B.py两个文件。在A中可以通过导入B来读取B模块定义的内容,导...
    99+
    2024-04-02
  • 如何进行Python模块与函数的应用操作
    本篇文章为大家展示了如何进行Python模块与函数的应用操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。模块与函数使用Python/C API中的PyImport_Import()函数可以在C程序...
    99+
    2023-06-17
  • python中NumPy的安装与基本操作
    目录Numpy是什么NumPy的安装多维数组创建多维数组多维数组的常用属性多维数组的基本操作数组的算术运算数组的自身运算随机数组索引、切片、迭代总结Numpy是什么 很简单,Nump...
    99+
    2024-04-02
  • Python常用的I模块与操作系统相关的调用和操作方式
    本篇内容介绍了“Python常用的I模块与操作系统相关的调用和操作方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python常用模块I和...
    99+
    2023-06-17
  • 从头开始理解文件系统:操作系统的基础构建模块
    ...
    99+
    2024-04-02
  • Python Logging 模块的错误处理:诊断和解决问题
    引言 Python logging 模块是用于记录应用程序事件和错误的强大工具。然而,当应用程序出现意外行为时,理解和解决 logging 模块中的错误至关重要。本文将探讨如何使用 logging 模块的调试功能诊断和解决常见问题。 使用...
    99+
    2024-02-20
    Python Logging 错误处理 调试 日志记录
  • Python中mmap模块处理大文本的操作方法
    目录mmap 介绍WindowsUnix支持的方法使用mmap读取大文件什么时候用mmap?总结:使用mmap的时机如果现在有一个需求,我们需要处理一个20G的大文件,我们会怎么处理...
    99+
    2023-02-07
    Python中mmap模块 Python mmap模块
  • 利用Python中xlwt模块操作excel的示例详解
    目录一、安装二、创建表格并写入三、设置单元格样式四、设置单元格宽度五、设置单元格背景色六、设置单元格内容对齐方式七、单元格添加超链接八、单元格添加公式九、单元格中输入日期十、合并行和...
    99+
    2024-04-02
  • Python中字典的基础介绍及常用操作总结
    目录1.字典的介绍2.访问字典的值(一)根据键访问值(二)通过get()方法访问值3.修改字典的值4.添加字典的元素(键值对)5.删除字典的元素6.字典常见操作1.len 测量字典中...
    99+
    2024-04-02
  • Python中元组的基础介绍及常用操作总结
    目录1.元组的介绍2.访问元组3.修改元组(不可以修改的)4.元组的内置函数有count,index5.类型转换1.将元组转换为列表2.将元组转换为集合1.元组的介绍 Python...
    99+
    2024-04-02
  • Python中os模块的简单使用及重命名操作
    前言 OS模块虽然基础的时候已经学过了,但是谁让本人属于那种不用立马就忘的人呢,所以在在下爬取某个不可名状的男人都喜欢的网站的时候,在遇到爬取下来的数据需要保存的时候,就需要用到O...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作