paramiko 模块

功能:提供了ssh及sftp进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。

1  基于用户名和密码的 sshclient 方式登录

执行过程:传统的连接服务器、执行命令、关闭的一个操作

 import paramiko

 # 实例化一个客户端
ssh_client = paramiko.SSHClient()
# 实现自动添加ssh信任关系knows_hosts
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程linux目标机
ssh_client.connect(hostname='ip',port=22,username='root',password='paswd')
# 在远程服务器执行命令
stdin,stdout,stderr = ssh_client.exec_command('df -h')
# 读取标准输出和标准错误
out,err = stdout.read(),stderr.read()
# 打印输出的信息
mess = out if out else err
print(mess.decode())
# 关闭客户端连接
ssh_client.close()

2 基于用户名和密码的 transport 方式登录

执行过程:连接服务器,执行上传,下载,关闭操作

 import paramiko
# 定义传输的ip和端口
transfer = paramiko.Transport('10.10.2.12',22)
# 定义传输的账号,密码
transfer.connect(username='root',password='passwd')
# 建立sftp连接
sftp = paramiko.SFTPClient.from_transport(transfer)
# 上传
sftp.put('源文件','目标文件')
# 下载
sftp.get('服务器文件,'本地文件')
# 关闭连接
transfer.close()

3  基于公钥密钥的 SSHClient 方式登录

 # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa', password='')
# 建立连接
ssh = paramiko.SSHClient()
ssh.connect(hostname='ip',port=22,username='user',pkey=pkey)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -hl')
# 结果放到stdout中,如果有错误将放到stderr中
print(stdout.read().decode())
# 关闭连接
ssh.close()

4  基于密钥的 Transport 方式登录

 # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa', password='')
# 建立连接
trans = paramiko.Transport(('ip', 22))
trans.connect(username='user', pkey=pkey) # 将sshclient的对象的transport指定为以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans # 执行命令,和传统方法一样
stdin, stdout, stderr = ssh.exec_command('df -hl')
print(stdout.read().decode()) #
sftp = paramiko.SFTPClient.from_transport(trans)
sftp.put('src_file,'dst_file')
sftp.get('dst_file,'src_file)
# 关闭连接
trans.close()

小技巧:

修改 paramiko模块的源码,将用户的输入进行文件保存
首先从github下载模块的源码包,打开 demmos\interactive.py文件,跳转到49行,添加如下:
# 这里开始输入命令的监听
cmd_list = [] # 用于记录用户的输入的每个键
while True:
r, w, e = select.select([chan, sys.stdin], [], []) # 进入监听状态
if chan in r:
try:
x = u(chan.recv(1024))
if len(x) == 0:
sys.stdout.write('\r\n*** EOF\r\n')
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
if sys.stdin in r:
x = sys.stdin.read(1) # 这里的1 代表读取用户敲击的每一个键
if len(x) == 0:
break
# 将用户输入的命令进行写文件保存,当遇到键盘输入为回车,则开发文件写入用户输入的命令,如果没有回车,则
# 将用户键盘输入的每一个键进行列表添加
if x == '\r': # 为回车则写文件
f = open('./stdin.log','w')
cmd_str = ''.join(cmd_list)
f.write(cmd_str+'\r')
f.close()
else:
cmd_list.append(x)
chan.send(x)
这样就把用户的输入保存到stdin.log文件中了。

python学习之---- paramiko 模块的更多相关文章

  1. python 学习分享-paramiko模块

    paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BS ...

  2. Python学习 Part4:模块

    Python学习 Part4:模块 1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用.模块中的定义可以被导入到其他模块或者main模块. 模块就是一个包含Python定义 ...

  3. python学习之argparse模块

    python学习之argparse模块 一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行 ...

  4. Python学习day19-常用模块之re模块

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  5. Python学习day18-常用模块之NumPy

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  6. Python 学习记录之----模块 paramiko

    paramiko 一.安装 pip3.5 install paramiko pip3.5 install pycrypto # pycrypto,由于 paramiko 模块内部依赖pycrypto, ...

  7. python远程连接paramiko 模块和堡垒机实现

    paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...

  8. python学习笔记五 模块下(基础篇)

    shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...

  9. python学习之random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

随机推荐

  1. Android基础夯实--重温动画(二)之Frame Animation

    心灵鸡汤:天下事有难易乎,为之,则难者亦易矣:不为,则易者亦难矣. 摘要 当你已经掌握了Tween Animation之后,再来看Frame Animation,你就会顿悟,喔,原来Frame Ani ...

  2. iOS infoq资料架构设计漫谈

    http://www.infoq.com/cn/ios/?utm_source=infoq&utm_medium=header_graybar&utm_campaign=topic_c ...

  3. laravel学习笔记(一)

    laravel 简述 优点:优雅.简洁.工程化(项目架构,协同开发) 版本:2011 June 1.0 ,LTS(long time) ,laravel 5.4 功能:队列.搜索.数据库搜索.定时脚本 ...

  4. AS400服务程序总结

    1.服务程序的创建和调用过程 1.1生成module 1.2编写BND文件确定输出接口 1.3生成服务程序 1.3.运行调用程序时,将服务程序导入到作业内存区active group,常驻内存 2.结 ...

  5. Android(java)学习笔记169:服务(service)之为什么使用服务

    1.服务 service 长期在后台运行的进程,一般没有应用程序界面   2.进程线程和应用程序之间的关系 应用程序开启,系统启动一个Linux进程,所有的组件都是运行在同一个进程的同一个线程(mai ...

  6. hdu5792 World is Exploding(多校第五场)树状数组求逆序对 离散化

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5792 题目描述:给你n个值,每个值用A[i]表示,然后问你能否找到多少组(a,b,c,d)四个编号,四 ...

  7. activitmq+keepalived+nfs 非zk的高可用集群构建

    nfs 192.168.10.32 maast 192.168.10.4 savel 192.168.10.31 应对这个需求既要高可用又要消息延迟,只能使用变态方式实现 nfs部署 #yum ins ...

  8. 两个div之间的蜜汁间隙

    两个div左右相邻,想让他们紧挨在一起 加了margin:0:padding:0: 不知道为什么还是会有间隙. 然后在两个div的父元素加了:font-size:0: 就终于挨在一起惹.

  9. QT_2

    1.默认生成代码的含义(.pro)

  10. OpenCV2:第四章 导出图像

    一.简介 一般我们用OpenCV来处理图像数据的时候,OpenCV已经把图像数据包装成一个图像数据类,我们只需要对类成员的像素值进行修改就行了. 但是在Windows开发的WinSDK/MFC中,对图 ...