一文详解Paramiko安装与使用

项目要求 定期向特定服务器传输软件运行状况文件(基于SFTP),因此计划写一个Python脚本,该脚本首先要定期读取产品运营数据,然后按要求生成数据文件,最后通过 Paramiko 上传到SFTP服务器。
这篇文章是我在实现以上需求过程中,对于Paramiko的使用总结。

  • Paramiko 简介
  • Paramiko 安装
  • Paramiko 使用

一、Paramiko 简介

Paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方式,可实现远程命令执行、文件传输、中间SSH代理等功能。

通俗的讲:

Python的Paramiko依赖库,可以帮助开发者通过代码的方式完成对远程服务器的文件上传文件下载操作,也可以对远程服务器输入操作命令

二、Paramiko 安装

我的电脑Python环境Python 3.7.3,这里的安装也是基于该Python环境进行安装。
我的电脑Python环境Python 3.7.3

安装Paramiko之前,首选需要安装 Pycrypto 依赖,其用于提供多种加密方式,是Paramiko的依赖包。

# 安装Pycrypto:(Paramiko依赖PyCrypto,需要先安装PyCrypto,用于提供多种加密方式)
pip3 install pycrypto 
# 安装Paramiko
pip3 install paramiko

若安装过程中遇到SSH支持问题相关的错误提醒,可更换如下方式进行安装:

# 安装Pycrypto:(豆瓣源)
pip3 install pycrypto -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
# 安装Paramiko:(豆瓣源)
pip3 install paramiko -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

三、Paramiko 使用

Paramiko主要包含两个部分:SFTPClientSSHClient

  • SFTPClient类似于SFTP工具,可以实现对远程服务器的文件进行上传和下载。
  • SSHClient类似于Linux的ssh命令,可以通过SSHClient模块对远程服务器执行一些命令操作(Linux)。

3.1 SFTPClient

SFTPClient 类似于SFTP工具,可以实现对远程服务器的文件进行上传和下载。

import paramiko

# 连接sftp服务器(Ip,端口)
sftp_transport = paramiko.Transport(('10.10.10.10', 6666))
# 登录sftp服务器(账号,密码)
sftp_transport.connect(username = 'xiaxl', password = 'secret')
# 建立传输通道
sftp = paramiko.SFTPClient.from_transport(sftp_transport)
# 上传文件(本地路径,目的服务器路径)
sftp.put('/home/workspace/D_001_20230110.txt', '/incoming/D_001_20230110.txt')
# 下载下载(本地路径,目的服务器路径)
#sftp.get('/home/workspace/D_002_20230110.txt', '/incoming/D_002_20230110.txt')
# 关闭连接
sftp_transport.close()

3.1 SSHClient

SSHClient 类似于Linux的ssh命令,可以通过SSHClient模块对远程服务器执行一些命令操作(Linux)。

import paramiko  
  
# 实例化 SSHclient  
ssh_client = paramiko.SSHClient()  
# 保存服务器密钥  
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
# 输入服务器地址  
ssh_client.connect(hostname='xxxx', port=22, username='root', password='xxxxxx')  
# 返回了三个数据,第一个是输入命令,第2个是命令返回的结果,第3个是命令错误时返回的结果  
stdin, stdout, stderr = ssh_client.exec_command('pwd;lll')  
# 返回了当前的路径结果,如果错误则返回为空  
print(stdout.read().decode('utf-8'))  
# 返回错误的执行结果,如果正确则返回为空  
print(stderr.read().decode('utf-8'))

猜你喜欢

转载自blog.csdn.net/aiwusheng/article/details/128634250