paramiko模块安装:pip3 install paramiko

paramiko模块(模拟SSH),是基于SSH(网络安全协议)用于连接远程服务器并执行相关操作。

ssh:

  • 基于口令的安全验证
  • 基于密匙的安全验证(非对称加密)

paramiko常用类:

  • SSHClient类
  • SFTPClient类

一、SSHClient类


封装了传输、通道以及SFTPClient的校验、建立方法,通常用于执行命令

1.connect()方法

connect(hostname, port=22, username=None,password=None,pkey=None, key_filename=None,timeout=None,allow_agent=True, look_for_keys=True, compress=False)

参数说明:

hostname 连接目标主机或主机地址
port 连接目录的端口,默认为22
username 用户名
password 密码
pkey 私钥方式用户验证
key_filename 私钥文件名
timeout 连接超时时间
allow_agent 是否允许使用ssh代理
look_for_keys 是否允许搜索私钥文件
compress 打开时是否压缩                                         

2.exec_command()方法

exec_command(command,bufsize = -1)

参数说明:

command 执行的指令
bufsize 文件缓冲区大小,-1为不限制                       

3.load_system_host_keys()方法

load_system_host_keys(filename = None)

参数说明:

  • filename:指定远程主机的公钥文件,默认为.ssh目录下的know_hosts文件

4.set_missing_host_key_policy()方法
     set_missing_host_key_policy(paramiko.AutAddPolicy())

参数说明:

AutoAddPolicy 自动添加主机名及密钥到本地并保存,不依赖于load_system_host_keys配置,即known_host里没有远程主机的公钥时(连接的新的主机),自动添加为yes
RejectPolicy 自动拒绝未知主机名和密钥,依赖于load_system_host_keys()
WarnningPolicy 功能与AutoAddPolicy相同,不过如果是未知主机会提示yes/no

5.close() :关闭连接

例:利用paramiko模拟ssh执行命令(Linux系统运行)

例一、

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import paramiko
import sys ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接没连过的主机
ssh.connect(hostname='localhost',port=22,username='root',password ='') # 连接服务

while True:
data = input('>>>')
if data=='exit':break
stdin, stdout, stderr = ssh.exec_command(data) # 执行命令 result , err = stdout.read().decode(),stderr.read()
if not err:
print(result)
else:
print(err)
ssh.close()

明文用户密码

例二、

#!/usr/bin/python3
# -*- coding:utf-8 -*- import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/路径/id_rsa') # 指定文件在哪儿
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接没连过的主机
ssh.connect(hostname='localhost',port=22,username='root',key = private_key) # 连接服务>器
while True:
data = input('>>>')
if data == 'exit':break
stdin, stdout, stderr = ssh.exec_command(data) # 执行命令 result , err = stdout.read(),stderr.read()
if not err:
print(result)
else:
print(err) ssh.close()

基于公钥

二、SFTPClient类


根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作.

1.Transport()方法

Transport(hostname,port)

参数说明:

hostname 主机名或主机地址                     
port 端口,默认为22

2.put()方法

put(localpath, remotepath, callback = None, confirm = True)

参数说明:

localpath 上传源文件的本地路径
remotepath 目标路径
callback 获取接收的总传输字节数
confirm 上传完毕后是否调用start()方法,以便确认大小         

3.get()方法

get(remotepath, localpath,callback=None)

参数说明:

remotepath 需要下载的远程文件
localpath 本地存储路径
callback 获取接收的总传输字节数             

更多方法:

方法 描述
sftp.getcwd() 返回当前工作目录
sftp.chdir(path) 改变工作目录
sftp.chmod(path, mode) 修改权限
sftp.chown(path, uid, gid) 设置属主属组
sftp.close() 关闭sftp
sftp.file(filename, mode=’r’, bufsize=-1) 读取文件
sftp.from_transport(s) 创建SFTP客户端通道
sftp.listdir(path=’.’) 列出目录,返回一个列表
sftp.listdir_attr(path=’.’) 列出目录,返回一个SFTPAttributes列表
sftp.mkdir(path, mode=511) 创建目录
sftp.normalize(path) 返回规范化path
sftp.open(filename, mode=’r’, bufsize=-1) 在远程服务器打开文件
sftp.put(localpath, remotepath, callback=None) localpath文件上传到远程服务器remotepath
sftp.get(remotepath, localpath, callback=None) 从远程服务器remotepath拉文件到本地localpath                   
sftp.readlink(path) 返回一个符号链接目标
sftp.remove(path) 删除文件
sftp.rename(oldpath, newpath) 重命名文件或目录
sftp.rmdir(path) 删除目录
sftp.stat(path) 返回远程服务器文件信息(返回一个对象的属性)
sftp.truncate(path, size) 截取文件大小
sftp.symlink(source, dest) 创建一个软链接(快捷方式)
sftp.unlink(path) 删除软链接

例:用paramiko模块模拟ftp上传和下载

例一、

#!/usr/bin/python3
# -*-coding:utf-8 -*- import paramiko
transport = paramiko.Transport('127.0.0.0',22) # 创建实例
transport.connect(username='root',password='') # 创建链接
sftp = paramiko.SFTPClient.from_transport(transport) # 将创建的实例作为参数传给sftp,>交互进行的地方
sftp.put(r'文件的所处的位置路径/文件名',r'要上传到的地方/文件名') # 上传
sftp.get(r'要从哪儿下载文件/文件名',r'文件要存到哪儿/文件名') # 下载 transport.close()

明文用户密码

例二、

#!/usr/bin/python3
# -*-coding:utf-8 -*- import paramiko
private_key = paramiko.RSAKey.from_private_key_file(r'路径/id_rsa')
transport = paramiko.Transport('127.0.0.0',22) # 创建实例
transport.connect(username='root',pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport) # 将创建的实例作为参数传给sftp,>交互进行的地方
sftp.put(r'文件的所处的位置路径/文件名',r'要上传到的地方/文件名') # 上传
sftp.get(r'要从哪儿下载文件/文件名',r'文件要存到哪儿/文件名') # 下载 transport.close()

基于公钥

paramiko模块是一个比较强大的ssh连接模块,以上的示例只是列出了该模块的一些简单的使用方法,还可以使用threading模块加块程序并发的速度;也可以使用configparser模块处理配置文件,而我们将所有IP、用户信息操作都放入配置文件;使用setproctitle模块为执行的程序加一个容易区分的title等。

参考笔记:http://www.cnblogs.com/breezey/p/6663546.html

https://www.e-learn.cn/content/python/271181

https://blog.csdn.net/cc297322716/article/details/78608283

Python_paramiko模块的更多相关文章

  1. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  4. Python标准模块--ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  5. Python标准模块--Unicode

    1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...

  6. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

  7. 自己实现一个javascript事件模块

    nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...

  8. 理解nodejs模块的scope

    描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...

  9. nodejs模块发布及命令行程序开发

    前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...

随机推荐

  1. jQuery之事件和批量操作、事件委托示例

    一.常用事件 click(function(){...}) // 点击时触发 focus(function(){...}) // 获得焦点触发 blur(function(){...}) // 失去焦 ...

  2. Element UI——本地引入iconfont不显示

    前言 前面因为本地引入Element UI导致了iconfont不显示,所以只好再去Element UI官网去扒下iconfot 步骤 进入官网 组件 | Element UI F12进入控制台,找到 ...

  3. 适配相关:viewpoint,@media,vw/vh,em/rem

    从网易与淘宝的font-size思考前端设计稿与工作流: http://www.cnblogs.com/lyzg/p/4877277.html Rem布局的原理解析: https://yanhaiji ...

  4. 【BZOJ5496】[十二省联考2019]字符串问题(后缀树)

    [BZOJ5496][十二省联考2019]字符串问题(后缀树) 题面 BZOJ 洛谷 题解 首先显然可以把具有支配关系的串从\(A\)到\(B\)连一条有向边,如果\(B_i\)是\(A_j\)的前缀 ...

  5. mac/Linux/centos ssh连接服务器以及跳板机,实现类型Xshell 功能

    1. 由于之前一段时间,公司测试服务器需要有跳板机这种操作,由于mac机器上没有类似Xshell这种程序,所以,只能自己造轮子啦. 本程序采用Shell+Expect脚本编写 具体代码请查看:http ...

  6. (转)Spring事务管理详解

    背景:之前一直在学习数据库中的相关事务,而忽略了spring中的事务配置,在阿里面试时候基本是惨败,这里做一个总结. 可能是最漂亮的Spring事务管理详解 https://github.com/Sn ...

  7. HMM隐马尔科夫算法(Hidden Markov Algorithm)初探

    1. HMM背景 0x1:概率模型 - 用概率分布的方式抽象事物的规律 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测. 概率模型(p ...

  8. 【asp.net】asp.net遍历Request的信息

    #需求: 在服务端获取从客户端发送过来的所有数据信息: #方案: 1.服务端代码 public void ProcessRequest(HttpContext context) { //打印所有参数信 ...

  9. python 错误捕获机制分析

    python语言是编程中使用率在Top 3之内的语言.python语言以灵活与简单著称,那么越是灵活的语言越需要判断出错的功力. 简单示例 以下是一个简单的错误程序,被除数不可为0,那么看看该代码的执 ...

  10. react实战项目开发(2) react几个重要概念以及JSX语法

    前言 前面我们已经学习了利用官方脚手架搭建一套可以应用在生产环境下的React开发环境.那么今天这篇文章主要先了解几个react重要的概念,以及讲解本文的重要知识JSX语法 React重要概念 [思想 ...