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. 如何正确理解关键字"with"与上下文管理器

    转自:https://foofish.net/with-and-context-manager.html 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 “with” 关键字的语句,它通 ...

  2. tar.bz2

    tar -xvjf gcc-4.1.0.tar.bz2 bzip2 -d  gcc-4.1.0.tar.bz2

  3. ML-学习提纲2

    https://machinelearningmastery.com/a-tour-of-machine-learning-algorithms/ http://blog.csdn.net/u0110 ...

  4. Smart Contracts

    A smart contract is a computer code running on top of a blockchain containing a set of rules under w ...

  5. mybatis 存储过程的写法

    (注意事项: 在使用游标的时候,不能在游标声明之前,使用crud) 存储过程示例 CREATE DEFINER=`root`@`::` PROCEDURE `earnings_proceduce`() ...

  6. 跑RFCN

    按照这个来http://blog.csdn.net/sinat_30071459/article/details/53202977

  7. 按名字寻找文件和文件夹 find命令

    find <指定目录> <指定条件> <指定动作> find /home/bnrc/py-faster-rcnn/caffe-fast-rcnn/ -name 'd ...

  8. MySQL-06 数据备份和恢复

    学习目标 数据备份 数据恢复 数据库迁移 导入和导出 数据备份 系统意外崩溃或者服务器硬件损坏都有可能导致数据库丢失,因此生产环境中数据备份非常重要. MySQLdump命令备份 该命令可以将数据库备 ...

  9. Mac 下用homebrew安装配置MongoDB

    ---恢复内容开始--- 1.首先安装homebrew,已有就跳过 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent. ...

  10. HTTP请求头的具体含意

    为你详细解读HTTP请求头的具体含意 | 浏览:5763 | 更新:2012-03-16 16:41 当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头 ...