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中星号变量的几种特殊用法
Sep 07 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
python3的输入方式及多组输入方法
Oct 17 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
从0开始的Python学习016异常
Apr 08 Python
详解Python:面向对象编程
Apr 10 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
python中使用.py配置文件的方法详解
Nov 23 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 5.5 新特性
2013/07/02 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
golang与PHP输出excel示例
2016/07/22 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
JavaScript实现简单计算器
2020/03/19 Javascript
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
python如何读写csv数据
2018/03/21 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
解决python replace函数替换无效问题
2020/01/18 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
2014全国两会心得体会
2014/03/17 职场文书
体育专业求职信
2014/07/16 职场文书
代理人委托书
2014/08/01 职场文书
男性健康日的活动方案
2014/08/18 职场文书
网络管理员岗位职责
2015/02/12 职场文书
道歉信怎么写
2015/05/12 职场文书
论文评审意见
2015/06/05 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js