返回顶部
首页 > 资讯 > 后端开发 > Python >python模块paramiko与ssh
  • 835
分享到

python模块paramiko与ssh

模块pythonssh 2023-01-31 00:01:29 835人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

  paramiko是用python语言写的一个模块,遵循ssh2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持linux, Solaris, BSD, MacOS X, windows等平台通过SSH从一个平台连

  paramiko是用python语言写的一个模块,遵循ssh2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持linux, Solaris, BSD, MacOS X, windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。


一、安装

paramiko模块依赖PyCrypto模块,而PyCrypto需要GCC库编译,不过一般发行版的源里带有该模块。Centos6,直接借助以下命令可以直接完成安装:

 

  1. # yum install gcc Python-crypto python-paramiko python-devel  -y  


windows的话,可以下载二进制包

PyCrypto:Http://www.voidspace.org.uk/python/pycrypto-2.6.1/ 下一步下一步安装即可

paramiko:https://pypi.python.org/pypi/paramiko/1.7.4  解压缩,然后进入解压缩目录,在DOS下执行

python setup.py build
python setup.py install

或者

pip install paramiko

二、paramiko的连接

使用paramiko模块有两种连接方式,一种是通过paramiko.SSHClient()函数,另外一种是通过paramiko.Transport()函数。

方法一:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用户名", "口令")

上面的第二行代码的作用是允许连接不在know_hosts文件中的主机。

方法二:

import paramiko
t = paramiko.Transport(("主机","端口"))
t.connect(username = "用户名", passWord = "口令")

如果连接远程主机需要提供密钥,上面第二行代码可改成:

t.connect(username = "用户名", password = "口令", hosTKEy="密钥")

三、paramiko ssh连接

以下是一个简单的通过paramiko模块定义的ssh连接并执行命令的函数,如下:


#!/usr/bin/python
#-*- coding: utf-8 -*-
import paramiko
#paramiko.util.log_to_file('/tmp/sshout')
def ssh2(ip,username,passwd,cmd):
    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip,22,username,passwd,timeout=5)
        stdin,stdout,stderr = ssh.exec_command(cmd)
#           stdin.write("Y")   #简单交互,输入 ‘Y’
        print stdout.read()
#        for x in  stdout.readlines():
#          print x.strip("n")
        print '%stOKn'%(ip)
        ssh.close()
    except :
        print '%stErrorn'%(ip)
ssh2("192.168.0.102","root","361way","hostname;ifconfig")
ssh2("192.168.0.107","root","123456","ifconfig")

  其中第四行的日志部分,是记录ssh连接交互时的一些信息,可以看做是类似于debug的输出,一般情况下不需要开启。


stdin.write部分是用于交互情况下,通过该命令可以执行交互。注意这里可能会引起歧义,这里的交互并不是ssh连接过程中出现的让输入yes的交互,因为paramiko模块在连接过程中会自动处理好yes确认。这里的交互是指后面的cmd需要的执行的程序可能出现交互的情况下,可以通过该参数进行交互。


stdout标准输出,在输出内容比较少时,可以通过直接使用read读取出所有的输出;但在输出内容比较多时,建议通过按行读取进行处理。不过按行读取时,每行结尾会有换行符n,这样输出的结果很不美观。可以通过strip进行字符串的处理。


在函数调用过程中需要注意的是,IP、username、passwd都是属于字符串型的,所以需要加引号。后面执行的cmd,如果有多个命令需要操作时,需要通过分号进行分割。


四、paramiko sftp示例

单个文件小传下载的示例:

import paramiko
#建立一个加密的管道
scp=paramiko.Transport(('192.168.0.102',22))
#建立连接
scp.connect(username='root',password='361way')
#建立一个sftp客户端对象,通过ssh transport操作远程文件
sftp=paramiko.SFTPClient.from_transport(scp)
#Copy a remote file (remotepath) from the SFTP server to the local host
sftp.get('/root/testfile','/tmp/361way')
#Copy a local file (localpath) to the SFTP server as remotepath
sftp.put('/root/crash-6.1.6.tar.gz','/tmp/crash-6.1.6.tar.gz')
scp.close()

一个目录下多个文件上传下载的示例:

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import paramiko,datetime,os
hostname='192.168.0.102'
username='root'
password='361way'
port=22
local_dir='/tmp/getfile'
remote_dir='/tmp/abc'
try:
    t=paramiko.Transport((hostname,port))
    t.connect(username=username,password=password)
    sftp=paramiko.SFTPClient.from_transport(t)
    #files=sftp.listdir(dir_path)
    files=sftp.listdir(remote_dir)
    for f in files:
        print ''
        print '#########################################'
        print 'Beginning to download file  from %s  %s ' % (hostname,datetime.datetime.now())
        print 'Downloading file:',os.path.join(remote_dir,f)
        sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))#下载
        #sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))#上传
        print 'Download file success %s ' % datetime.datetime.now()
        print ''
        print '##########################################'
    t.close()
except Exception:
       print "connect error!"

注:本处的目录下所有文件进行下载或上传的示例中,在遇到目录下还有嵌套的目录存在时,会将目录也当做文件进行处理,所以如果想要更加的完美的话,可以通过引入stat模块下的S_ISDIR方法进行处理

paramiko.transport对象也支持以Socket的方式进行连接,如下示例:

import paramiko
transport = paramiko.Transport(('localhost',22))
transport.connect(username='root', password = 'password')
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(remotefile,localfile)
#如果是上传则用:
#sftp.put(localfile, remotefile)
transport.close()
#用socket连接
tcpsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpsock.settimeout(5)
tcpsock.connect((ip,22),)
ssh = paramiko.Transport(tcpsock)
ssh.connect(username=user,password=password)
sftpConnect=paramiko.SFTPClient.from_transport(ssh)

五、利用paramiko实现ssh的交互式连接

以下是通过paramiko模块直接用ssh协议登陆到远程服务器的操作代码,这里先定义一个interactive模块,代码如下:

import socket
import sys
# windows does not have termiOS...
try:
    import termios
    import tty
    has_termios = True
except ImportError:
    has_termios = False
def interactive_shell(chan):
    if has_termios:
        posix_shell(chan)
    else:
        windows_shell(chan)
def posix_shell(chan):
    import select
    oldtty = termios.tcgetattr(sys.stdin)
    try:
        tty.setraw(sys.stdin.fileno())
        tty.setcbreak(sys.stdin.fileno())
        chan.settimeout(0.0)
        while True:
            r, w, e = select.select([chan, sys.stdin], [], [])
            if chan in r:
                try:
                    x = chan.recv(1024)
                    if len(x) == 0:
                        print 'rn*** EOFrn',
                        break
                    sys.stdout.write(x)
                    sys.stdout.flush()
                except socket.timeout:
                    pass
            if sys.stdin in r:
                x = sys.stdin.read(1)
                if len(x) == 0:
                    break
                chan.send(x)
    finally:
        termios.tcsetattr(sys.stdin, termios.TCSADRaiN, oldtty)
# thanks to Mike Looijmans for this code
def windows_shell(chan):
    import threading
    sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.rnrn")
    def writeall(sock):
        while True:
            data = sock.recv(256)
            if not data:
                sys.stdout.write('rn*** EOF ***rnrn')
                sys.stdout.flush()
                break
            sys.stdout.write(data)
            sys.stdout.flush()
    writer = threading.Thread(target=writeall, args=(chan,))
    writer.start()
    try:
        while True:
            d = sys.stdin.read(1)
            if not d:
                break
            chan.send(d)
    except EOFError:
        # user hit ^Z or F6
        pass

代码内容可以从paramiko 在GitHub项目上的demo里获取。再另外写一个ssh_inter.py的交互主程序,内容如下:

import paramiko
import interactive
#记录日志
paramiko.util.log_to_file('/tmp/test')
#建立ssh连接
ssh=paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.0.102',port=22,username='root',password='xxxxxx',compress=True)
#建立交互式shell连接
channel=ssh.invoke_shell()
#建立交互式管道
interactive.interactive_shell(channel)
#关闭连接
channel.close()
ssh.close()

执行效果就像我们平时直接使用ssh登录一样。


六、总结

paramiko模块是一个比较强大的ssh连接模块,以上的示例只是列出了该模块的一些简单的使用方法,还可以使用threading模块加块程序并发的速度;也可以使用configparser模块处理配置文件,而我们将所有IP、用户信息操作都放入配置文件;使用setproctitle模块为执行的程序加一个容易区分的title等。


同样,虽然连fabric这样大名鼎鼎的软件使用的ssh都是用paramiko模块进行的封装,不过你依然可以选择不使用它,你也可以选择pexpect模块实现封装一个简易的ssh连接工具、或者使用同样比较火的salt-ssh模块。


--结束END--

本文标题: python模块paramiko与ssh

本文链接: https://lsjlt.com/news/182743.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python模块paramiko与ssh
      paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连...
    99+
    2023-01-31
    模块 python ssh
  • python下paramiko模块ssh
        python下有个paramiko模块,这个模块可以实现ssh登录linux服务器,下面贴出代码,注意,我在centos5.6下,python2.6.5,paramiko-1.7的版本下测试成功。。。#!/usr/bin/env p...
    99+
    2023-01-31
    模块 python paramiko
  • python paramiko模块
        paramiko模块是python中很重要的模块,他的功能呢主要分为两大块功能。一个是模拟SSH功能登录到远程主机上执行命令。一个是模拟SFTP功能传输文件。paramiko支持密码登陆方式和免密码的私钥登录方式。密码登陆方式代码如...
    99+
    2023-01-31
    模块 python paramiko
  • Python 之 paramiko 模块
    paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.安装#paramiko模块的安装需要先安装PyCrypto模块 wget https://pypi.python.or...
    99+
    2023-01-31
    模块 Python paramiko
  • python的paramiko模块
      paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。  由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, ...
    99+
    2023-01-31
    模块 python paramiko
  • python paramiko模块讲解
    Windows下有很多非常好的SSH客户端,比如Putty。在Python的世界里,你可以使用原始套接字和一些加密函数创建自己的SSH客户端或服务端,但如果有现成的模块,为什么还要自己实现呢。使用Paramiko库中的PyCrypto能够让...
    99+
    2023-01-31
    模块 python paramiko
  • Python paramiko模块(实现
    开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作 安装paramiko模块 pip3 install paramiko 基于用户密码方式 import paramiko # 创建...
    99+
    2023-01-31
    模块 Python paramiko
  • python paramiko模块的使
    一般使用paramiko的功能就是通过ssh远程执行命令,远程(上传、下载)传输文件等等依赖包:/usr/local/python27/bin/pip install pycrypto下载包 paramiko#wget http://en....
    99+
    2023-01-31
    模块 python paramiko
  • python paramiko模块简介
    python paramiko模块简介一:简介    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。    由于使用的是python这样的能够跨平台运行的语言,所以所有py...
    99+
    2023-01-31
    模块 简介 python
  • Python学习—paramiko模块实
    paramiko模块 paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。 import paramiko # ssh root@ip # 创建一个ssh对象 ...
    99+
    2023-01-31
    模块 Python paramiko
  • Python paramiko模块的安装
    paramiko是Python语言编写的遵循SSH2协议,支持加密和认证方式,连接远程服务器执行命令或者上传下载文件。一、安装paramikopip3 install paramiko二、使用用户名密码方式远程执行命令import para...
    99+
    2023-01-31
    模块 Python paramiko
  • python模块之paramiko学习<
    简介: paramiko是python(2.2或更高)的模块,遵循SSH2协议实现了安全(加密和认证)连接远程机器。 安装所需软件包: http://ftp.dlitz.net/pub/dlitz/crypto...
    99+
    2023-01-31
    模块 python paramiko
  • python paramiko模块管理S
    下面是两种使用paramiko连接到linux服务器的代码 方式一: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ...
    99+
    2023-01-31
    模块 python paramiko
  • Python33 paramiko模块
    paramiko模块 ssh登录 需要打开cmd,通过 pip install paramiko 命令来安装paramiko模块。 import paramiko #创建SSH对象 ssh = paramiko.SSHClient() ...
    99+
    2023-01-31
    模块 paramiko
  • Python Paramiko模块的安装与使用详解
    一、前言 常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。而使用paramiko可以很好...
    99+
    2022-06-04
    详解 模块 Python
  • Python通过paramiko模块备份
    1.过程思路 备份配置前,先保存交换机running config到starup config 交换机通过tftp备份配置文件 批量备份交换机配置(通过excel文件保存交换机IP) name ip SUZ-SW-101 ...
    99+
    2023-01-31
    备份 模块 Python
  • Python使用Paramiko模块实现
    paramiko是用python写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输以及远程命令执行。 通过安装包安装: wget ...
    99+
    2023-01-31
    模块 Python Paramiko
  • python的paramiko模块报错解
    写了一个Python脚本内容如下:#-*- coding:utf-8 -*- __author__ = 'kai' import paramiko import sys,os host = sys.argv[1] user = 'zk' ...
    99+
    2023-01-31
    报错 模块 python
  • python3导入paramiko模块
    这些指令包括paramiko 2及以上。如果你想安装paramiko 1。x,请参见安装(1.x)。然而,1.x依赖于不安全的依赖,所以升级是强烈鼓励。推荐的方式得到Paramiko是安装最新的稳定版本通过PIP:$ pip install...
    99+
    2023-01-31
    模块 paramiko
  • Python中paramiko模块的基础操作与排错问题
    目录关于应用安装示例1.秘钥登陆2.单个命令执行3.执行多个命令4.SFTPClient下载文件5.上传文件6.ssh工具封装补充学习参考关于 python的ssh库操作需要引入一个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作