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的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
python flask 多对多表查询功能
Jun 25 Python
python中模块查找的原理与方法详解
Aug 11 Python
python脚本实现验证码识别
Jun 07 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
浅析使用Python搭建http服务器
Oct 27 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
python os.rename实例用法详解
Dec 06 Python
Python实战之疫苗研发情况可视化
May 18 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
php实现多张图片上传加水印技巧
2013/04/18 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
js实现查询商品案例
2020/07/22 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
Python socket编程实例详解
2015/05/27 Python
python函数局部变量用法实例分析
2015/08/04 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
Python中如何添加自定义模块
2020/06/09 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
办公室文员工作自我评价
2013/12/01 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
关于母亲节的感言
2014/02/04 职场文书
二年级小学生评语
2014/04/21 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
学习经验交流会策划书
2015/11/02 职场文书
学习计划是什么
2019/04/30 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
如何通过cmd 连接阿里云服务器
2022/04/18 Servers