Python操作远程服务器 paramiko模块详细介绍


Posted in Python onAugust 07, 2019

前言

paramiko模块是基于Python实现的SSH远程安全连接,可以提供在远程服务器上执行命令、上传文件到服务器或者从指定服务器下载文件的功能。

paramiko模块安装方法

paramiko模块不是python自带的标准库,需要自行下载安装,建议使用pip自动安装。方法如下:

(1)配置pip命令和镜像源路径。如果已配置,跳过。

(2)执行pip install paramiko进行安装。出现successful字样表示安装完成。

paramiko常用函数介绍

SSHclient类

(1)ssh远程连接服务器,格式为:connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, ...)。其中hostname表示主机IP,port表示ssh服务端口号,默认是22,username和password表示登录用户名和密码,timeout表示设置连接超时时长。

(2)远程主机没有本地主机密钥或HostKeys对象时的连接方法。格式为:set_missing_host_key_policy(policy)。其中policy

参数常见取值有3种,分别如下:

  • AutoAddPolicy:自动添加主机名及主机密钥到本地的known_hosts,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认。最为常用。
  • WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接。
  • RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项

(3)远程执行命令,函数格式:exec_command(command, bufsize=-1, timeout=None, get_pty=False, environment=None),该命令的输入与输出流为标准输入、标出输出、标准错误输出。

(4)在远程服务器上生成新的交互式shell。函数格式为:invoke_shell(term='vt100', width=80, height=24, width_pixels=0, height_pixels=0, environment=None)。

上述只是介绍了SSHclient类常用的几个函数。SSHclient类函数详细介绍参考SSHClient

SFTPClient类

(1)创建一个已连通的SFTP客户端通道,格式为:from_transport(cls,t)

(2)将本地文件上传到服务器,格式为:put(localpath, remotepath, callback=None, confirm=True)

(3)从服务器下载文件到本地,格式为:get(remotepath, localpath, callback=None)

(4)在服务器上创建目录,格式为:mkdir()

(5)在服务器上删除目录,格式为:remove()

(6)在服务器上重命名目录,格式为:rename()

(7) 查看服务器文件状态,格式为:stat()

(8)列出服务器目录下的文件,格式为:listdir()

paramiko常用场景

(1)在远程服务器执行命令,并获取命执行命令输出结果

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.1', port=22, username='root', password='Aa12345!')
stdin, stdout, stderr = ssh.exec_command('df -k')
print stdout.read()
ssh.close()

(2)在远程服务器执行命令,并获取执行命令的结果码

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.1', port=22, username='root', password='Aa12345!')
stdin, stdout, stderr = ssh.exec_command('df -k')
channel = stdout.channel
ret = channel.recv_exit_status()
if ret == 0:
  print stdout.read()
else:
  print stderr.read()

(3)在远程服务器执行命令,需要生成子进程并交互执行命令

import paramiko,time
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.1', port=22, username='root', password='Aa12345!')
interact = conn.invoke_shell()
stdin, stdout, stderr = ssh.exec_command('df -k')
interact = conn.invoke_shell()
interact.send("sed -i '/192.168.0.2/d' /root/.ssh/known_hosts" + '\n')
time.sleep(1)
interact.send('ssh root@172.16.128.2' + '\n')
time.sleep(2)
interact.send('yes' + '\n')
time.sleep(2)
interact.send('Aa12345!' + '\n')
time.sleep(2)
interact.send('df -k!' + '\n')
result = interact.recv(65535)
print result

(4)上传文件到远程服务器

import paramiko
scp = paramiko.Transport(('192.168.0.1',22))
scp.connect(username='root',password='Aa12345!')
sftp=paramiko.SFTPClient.from_transport(scp)
local_path = "D:\\temp\\cc.txt"
remote_path = "/tmp/cc.txt"
sftp.put(local_path, remote_path)
scp.close()

(5)从远程服务器下载文件

import paramiko
scp = paramiko.Transport(('192.168.0.1',22))
scp.connect(username='root',password='Aa12345!')
sftp=paramiko.SFTPClient.from_transport(scp)
remote_path = "/tmp/aaaa.txt"
local_path = "D:\\temp\\aaaa.txt"
sftp.get(remote_path, local_path)
scp.close()

paramiko使用完整实例

import paramiko
def ssh_con(ip, username, password):
  try:
    con = paramiko.SSHClient()
    con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    con.connect(ip=ip, username=username, password=password, timeout=5)
  except:
    return None
  else:
    return con
def exec_cmd(conn, cmd):
  interact = conn.invoke_shell()
  interact.send(cmd)
  result = interact.recv(65535)
  return result  
def exec_cmd2(conn,cmd):
  stdin, stdout, stderr = conn.exec_command(cmd)
  channel = stdout.channel
  ret = channel.recv_exit_status()
  if ret == 0:
    return (ret, stdout.read())
  else:
    return (ret, stderr.read())
if __name__ == '__main__':
  ip = '192.168.0.1'
  user = 'root'
  passwd = 'root'
  con = ssh_con(ip, user, passwd)
  if not con:
    print "Connect %s fail,please check." % (ip,)
  cmd = 'df -k'
  ret, result = exec_cmd2(con,cmd)
  print result

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
Python中按键来获取指定的值
Mar 02 Python
python添加菜单图文讲解
Jun 04 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
python数字类型math库原理解析
Mar 02 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 #Python
python中的&&及||的实现示例
Aug 07 #Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 #Python
python代码实现逻辑回归logistic原理
Aug 07 #Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 #Python
Python如何调用外部系统命令
Aug 07 #Python
PyQt5通信机制 信号与槽详解
Aug 07 #Python
You might like
浅析SVN常见问题及解决方法
2013/06/21 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
继续学习javascript闭包
2015/12/03 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
小程序云开发实战小结
2018/10/25 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
简介Django中内置的一些中间件
2015/07/24 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Python解析json代码实例解析
2019/11/25 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Python同时迭代多个序列的方法
2020/07/28 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
柯基袜:Corgi Socks
2017/01/26 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
幼师求职自荐信范文
2014/01/26 职场文书
机关办公室岗位职责
2014/04/16 职场文书
意向协议书范本
2014/04/23 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
毕业实习计划书
2015/01/16 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书