Python_paramiko模块
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模块的更多相关文章
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- Python标准模块--ContextManager
1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...
- Python标准模块--Unicode
1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...
- Python标准模块--Iterators和Generators
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...
- 自己实现一个javascript事件模块
nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...
- 理解nodejs模块的scope
描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...
- nodejs模块发布及命令行程序开发
前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...
随机推荐
- [BZOJ 2285] [SDOI 2011] 保密
Description 传送门 Solution 这道题的最大难点在于读懂题意(雾 分数规划求出 \(n\) 到 \(1\cdots n_1\) 每个点的最小 \(\sum\frac{t_i}{s_i ...
- 深入理解JVM(1)——栈和局部变量操作指令
将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈i ...
- [NOI2005]维护数列——平衡树观止
本题题解并不详细,不推荐大家看这一篇. 可以看这篇 题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 100%的数据中, ...
- gprof性能测试工具
1.编译时加-pg选项,例如:gcc -pg test.c-o test_gprof.其中test后的_gprof一定要加上.会生成gmon.out. 2.运行程序.gprof test_gprof ...
- 安利一个刚考过的信息安全认证Security+
在目前的信息安全大潮之下,人才是信息安全发展的关键.而目前国内的信息安全人才是非常匮乏的,拥有国际信息安全认证的人才,在未来职业发展.升职加薪的道路上必将优于普通的信息安全从业者. 果哥今天推荐201 ...
- Ajax与JSON共同使用的小实例
实现的效果: 点击“点击”按钮,可以通过Ajax从服务器调过来相应的文档文件,而不需重新加载页面. 通过json可以将调过来的文档(String)转换为相应的json对象,从而对文档中数据进行操作. ...
- maven 构建参数和命令
mvn常用参数 mvn -e 显示详细错误 mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖) mvn -o 运行offline模式,不联网 ...
- saltstack主机管理项目:动态调用插件解析-模块解析(五)
一.动态调用插件解析 1.目录结构 1.base_module代码解析: def syntax_parser(self,section_name,mod_name,mod_data): print(& ...
- CMDB资产管理系统开发【day25】:需求分析
本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...
- Redis protocol (redis通信协议)
以前只会用redis -cli客户端, 或者在java程序里使用jedis来作为介质与redis服务器通信.这两天正好在实习中接触了一点这方面的内容. 五一放假就稍微翻了翻redis相关资料. 本篇博 ...