首页 存档 技术 查看内容

python 模块 paramiko 与 ssh

2018-3-30 13:00 |来自: 互联网 414 0

摘要: (点击上方公众号,可快速关注) 来源:361way 链接:www.361way.com/python-paramiko-ssh/3984.html paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。param ...

(点击上方公众号,可快速关注)


来源:361way

链接:www.361way.com/python-paramiko-ssh/3984.html


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


一、paramiko模块的安装


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


# yum install gcc python-crypto python-paramiko python-devel -y


windows版下可以安装windows版的GCC(MinGW),然后编辑安装pycrypto和paramiko ,下载安成后,直接运行python.EⅩE setup.py build 和 python.EⅩE setup.py install 就可以了。


二、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 instdout.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

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部