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

前言

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

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

(0)

相关推荐

  • python paramiko实现ssh远程访问的方法

    安装paramiko后,看下面例子: 复制代码 代码如下: import paramiko #设置ssh连接的远程主机地址和端口t=paramiko.Transport((ip,port))#设置登录名和密码t.connect(username=username,password=password)#连接成功后打开一个channelchan=t.open_session()#设置会话超时时间chan.settimeout(session_timeout)#打开远程的terminalchan.ge

  • python通过paramiko复制远程文件及文件目录到本地

    最近写运维自动化平台,需要用python写很多的小功能模块. 这里就分享一个用Python的paramiko来实现功能的一段代码: 复制远程服务器上的文件及文件夹到本地目录. 解释一下什么叫paramiko: paramiko是用python写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输以及远程命令执行. 安装paramiko也很简单,我用的是python3,装好了pip,可以直接用pip来安装

  • windows下安装python paramiko模块的代码

    1.安装python  windows版本好:python-2.5.1.msi 2.安装pycrypto windows版本号:pycrypto-2.0.1.win32-py2.5.exe地址:http://tmrc.mit.edu/mirror/twisted/Dependencies/Win/pycrypto-2.0.1.win32-py2.5.exe 3. 安装MySQL DB Module for Python 2.5地址:http://sourceforge.net/projects/

  • python利用paramiko连接远程服务器执行命令的方法

    python中的paramiko模块是用来实现ssh连接到远程服务器上的库,在进行连接的时候,可以用来执行命令,也可以用来上传文件. 1.得到一个连接的对象 在进行连接的时候,可以使用如下的代码: def connect(host): 'this is use the paramiko connect the host,return conn' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddP

  • Python Paramiko模块的安装与使用详解

    一.前言 常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了.而使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助.下面本文就来详细的介绍Python Paramiko模块的安装与使用,一起学习学习吧.. 二.安装 安装paramik

  • Python paramiko模块的使用示例

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 调用c

  • Python Paramiko模块的使用实际案例

    本文研究的主要是Python Paramiko模块的使用的实例,具体如下. Windows下有很多非常好的SSH客户端,比如Putty.在python的世界里,你可以使用原始套接字和一些加密函数创建自己的SSH客户端或服务端,但如果有现成的模块,为什么还要自己实现呢.使用Paramiko库中的PyCrypto能够让你轻松使用SSH2协议. Paramiko的安装方法网上有很多这样的帖子,这里就不描述了.这里主要讲如何使用它.Paramiko实现SSH2不外乎从两个角度实现:SSH客户端与服务端.

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

    前言 paramiko模块是基于Python实现的SSH远程安全连接,可以提供在远程服务器上执行命令.上传文件到服务器或者从指定服务器下载文件的功能. paramiko模块安装方法 paramiko模块不是python自带的标准库,需要自行下载安装,建议使用pip自动安装.方法如下: (1)配置pip命令和镜像源路径.如果已配置,跳过. (2)执行pip install paramiko进行安装.出现successful字样表示安装完成. paramiko常用函数介绍 SSHclient类 (1

  • python request 模块详细介绍

    request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作. GET 请求 # 1.无参数实例     import requests     ret = requests.get('https://github.com/timeline.json')     print

  • 利用python 更新ssh 远程代码 操作远程服务器的实现代码

    用python paramiko ssh 服务器,并pull对应目录代码的脚本 pull.py import paramiko import sys def sshclient_execmd(hostname, port, username, password, execmd): paramiko.util.log_to_file("paramiko.log") s = paramiko.SSHClient() s.set_missing_host_key_policy(paramik

  • Python3 queue队列模块详细介绍

    queue介绍 queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性. 注意: 在python2.x中,模块名为Queue queue模块有三种队列及构造函数 Python queue模块的FIFO队列先进先出. queue.Queue(maxsize) LIFO类似于堆,即先进后

  • Python 操作 Excel 之 openpyxl 模块

    目录 1.打开已有 Excel 文件 2.创建一个 Excel 文件,并修改 sheet 3.选择 sheet 的不同方式 4.Worksheet对象 5.Cell 对象 6.单元格插入图像 7.设置单元格样式 正式开始前依旧是模块的安装,使用如下命令即可实现: pip install openpyxl 官方对于该库的描述是: A Python library to read/write Excel 2010 xlsx/xlsm files 一款用于读写 Excel 2010 xlsx/xlsm

  • SQLSERVER简单创建DBLINK操作远程服务器数据库的方法

    本文实例讲述了SQLSERVER简单创建DBLINK操作远程服务器数据库的方法.分享给大家供大家参考,具体如下: --配置SQLSERVER数据库的DBLINK exec sp_addlinkedserver @server='WAS_SMS',@srvproduct='',@provider='SQLOLEDB',@datasrc='10.131.20.100' exec sp_addlinkedsrvlogin 'WAS_SMS','false', NULL,'CustomSMS','Sql

  • python检测远程服务器tcp端口的方法

    本文实例讲述了python检测远程服务器tcp端口的方法.分享给大家供大家参考.具体如下: python检测远程服务器tcp端口的代码,这段代码可以用来做服务器监控实用 #!/usr/bin/env python #coding:utf-8 #filename:tcp.py ''' author: gavingeng date: 2011-12-14 09:35:59 ''' import socket import sys NORMAL=0 ERROR=1 TIMEOUT=5 def ping

  • 腾讯云服务器搭建Jenkins详细介绍

    目录 一.连接腾讯云服务器 第二步:安装Tomcat 三.Jenkins部署 四.Jenkins安装 一.连接腾讯云服务器 1.Mac:(以ssh连接为例) 注意:IP地址为公网地址 ssh 用户名@IP地址 2.Windonws连接:详细说明 二.环境准备 第一步:安装Java 选择需要的java版本 yum list | grep openjdk 下载对应版本的java yum install java-1.8.0-openjdk.x86_64 第二步:安装Tomcat 可以选择要下载的版本

  • Python类的继承与多态详细介绍

    目录 概念 类的创建 类的继承 多态的使用 概念 类(Class): 用来描述具有相同的属性和方法的对象的集合. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用 self:self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类. 类调用 Car.weight 实例化  car01=Car(5) 实例对象调用  car01

  • Python操作Redis数据库的超详细教程

    目录 介绍 常用数据结构 安装 连接 String 字符串(键值对) List 列表 Hash 哈希 Set 集合 Zset 有序集合 Bitmap 位图 全局函数 总结 介绍 Redis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSI C语言编写.它拥有丰富的数据结构,拥有事务功能,保证命令的原子性.由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快.实时通讯.缓存等.但内存数据库通常要考虑机器的内存大小. Redis有16个逻辑数据库(db0

随机推荐