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的Tornado框架中实现简单的在线代理的教程
May 02 Python
python处理图片之PIL模块简单使用方法
May 11 Python
Python进程间通信用法实例
Jun 04 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
Python3.7中安装openCV库的方法
Jul 11 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
pandas 如何分割字符的实现方法
Jul 29 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
Python 切分数组实例解析
Nov 07 Python
实例代码讲解Python 线程池
Aug 24 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修改Linux或Unix口令的方法分享
2012/01/30 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Prototype源码浅析 Number部分
2012/01/16 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue-router 权限控制的示例代码
2017/09/21 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
python中的函数用法入门教程
2014/09/02 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
举例讲解Python装饰器
2020/12/24 Python
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
《美丽的黄昏》教学反思
2014/02/28 职场文书
洗发水广告词
2014/03/13 职场文书
大学生求职计划书
2014/04/30 职场文书
交通违章检讨书
2014/09/21 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
配置Kubernetes外网访问集群
2022/03/31 Servers