paramiko模块

  • 该模块基于SSH用于连接远程服务器并执行相关操作

    参考文档

SSHClient

  • 用于连接远程服务器并执行命令
import paramiko

#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='c1.salt.com',port=22,username='root',password='pwd')
#执行命令
stdin,stdout,stderr = ssh.exec_command('df')
#stdin返回输入的命令,stdout返回命令结果,stderr返回错误信息(stdout和stderr只会有一个有结果,错误时stderr有结果,正确是stdout有结果)
#获取命令结果
res,err = stdout.read(),stderr.read()
result = res if res else err
print(result.decode())

SFTPClient

  • 用于连接远程服务器并执行上传下载
import paramiko

transport = paramiko.Transport('hostname',22)
transport.connect(username='root',password='pwd') sftp = paramiko.SFTPClient.form_transport(transport)
#讲localtion.py上传至服务器/tmp/test.py
sftp.put('/tmp/localtion.py','/tmp/test.py')
#将remove_path下载到本地local_path
sftp.get('remove_path','local_path') transport.close()

SSH密钥

  • RSA 非对称密钥验证
  • 密钥分两部分
  • 公钥 pubilc key
  • 私钥 private key

生成公钥私钥

  • ssh -keygen
  • 默认存放在家目录下的.ssh/id_rsa
  • 其中/home/lmc/.ssh/id_ras是私钥,/home/lmc/.ssh/id_ras.pub是公钥

拷贝公钥给要登录的机器

  • ssh -copy-id "-p52113 root@10.0.0.31"

在SSH客户端上拷贝公钥并存储在windows

  • sz ~/.ssh/id_rsa

基于公钥的SSH

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', pkey=private_key) # 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read() # 关闭连接
ssh.close()

基于公钥密钥上传下载

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path') transport.close()

python网络编程-paramiko模块的更多相关文章

  1. python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  2. python网络编程-paramiko

    python基础学习日志day8-paramiko 一:简介 Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 现有这样的需求:需要使用windows客户端,远程连 ...

  3. python 网络编程--socket模块/struct模块

    socket模块: 客户端:CS架构,  client -> server 浏览器:BS架构,  browser -> server 网络通信本质:传输字节 doc命令查看ip地址:ipc ...

  4. python网络编程----requests模块

    python访问网站可以用标准模块--urllib模块(这里省略),和requests(安装-pip install requests)模块,requests模块是在urllib的基础上进行的封装,比 ...

  5. python网络编程-socketserver模块

    使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...

  6. python网络编程——SocketServer/Twisted/paramiko模块

    在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...

  7. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  8. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  9. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

随机推荐

  1. 使用原生js来操作对象dom的class属性

    之前一直都使用jquery来操作dom,今天想自己用原生写一些插件,却发现给dom增删class的时候,使用slice来截取className特别的麻烦,后来发现,原来原生JS本来就有提供api来对d ...

  2. GIS有关GP服务的发布和调用

    打印服务范例:http://blog.csdn.net/jingxinwjb/article/details/51906464 1.通过Modelbuilder新建工具.(注意:假如工具输出两个以上的 ...

  3. ArcGIS api for javascript-图层控制(图层树)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. linux的理解

    1.用户组 因为linux 是多人多任务系统 所有可能有很多人在主机人作业.比如 有A B C D 4个人 在linux主机上作业, A B C 3个人 在做同一个项目 建了一个文件夹这个文件只能A ...

  5. C# DateTime.Compare时间大小对比

  6. ORA-14517: Subpartition of index "string.string" is in unusable state

    今天碰到个ORA-03113, 原因不明. 猜测因为某些table DDL操作过后导致index unuable的case, 然后进行analyze table, 再碰到ORA-14517.  最后通 ...

  7. 通过JS,按照原比例控制图片尺寸

    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...

  8. rpm命令相关

    ### .列出所有安装过的包 rpm -qa | grep sql ### .如何获得某个软件包的文件全名. rpm -q mysql ### .rpm包中的文件安装到那里 rpm -ql lrzsz ...

  9. ssh两台主机建立信任关系

    A主机(10.104.11.107)   B主机(10.104.11.128) A: ssh-keygen -t rsa [root@H0f .ssh]# ssh-keygen -t rsa Gene ...

  10. java课后思考问题(一)

    1.一个Java类文件中真的只能有一个共有类吗? 一个Java类文件中只能有一个公有类 2.请使用Eclipse或javac检测一下以下代码,有错吗? 在Java中,可以将一个类定义在另一个类里面或者 ...