paramiko模块安装和使用(远程登录服务器)


Posted in Python onJanuary 27, 2014

一:简介

由paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。

举个常见的例子,现有这样的需求:需要使用windows客户端,远程连接到Linux服务器,查看上面的日志状态,大家通常使用的方法会是:

1:用telnet

2:用PUTTY

3:用WinSCP

4:用XManager等…

那现在如果需求又增加一条,要从服务器上下载文件,该怎么办?那常用的办法可能会是:

1:Linux上安装FTP并配置

2:Linux上安装Sambe并配置…

大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。

使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。

二:安装

安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块。

通常安装标准的python模块,只需要在模块的根目录下运行:

python setup.py build
python setup.py install

以上两条命令即可,paramiko和PyCrypto也不例外,唯一麻烦的就是安装PyCrypto时,需要GCC库编译,如果没有GCC库会报错,会导致PyCrypto以及paramiko无法安装。

以下以32 位的windows XP为例,说明paramiko的安装过程

1:安装python,2.2以上版本都可以,我使用的是2.5,安装过程略,并假设安装目录是c:\python。

2:判断本地是否安装了GCC,并在PATH变量可以找到,如果没有,可使用windows 版的GCC,即MinGW,下载地址:http://sourceforge.net/projects/mingw/,然后运行下载后的exe文件进行网络安装,假设目录为C:\mingw,在PATH中加入 C:\mingw\bin,并在c:\python\lib\distutils下新建一个名称是distutils.cfg的文件,填入:

[build] 
compiler=mingw32
 

3:下载PyCrypto ,地址是

https://www.dlitz.net/software/pycrypto/

安装PyCrypto:

解压缩
在dos下进入解压缩的目录,运行

C:\python\python.exe setup.py build
C:\python\python.exe setup.py install
 

安装测试
运行python.exe,在提示符下输入:

Import  Crypto

如果没有出现错误提示,说明Crypto安装成功

4:下载paramiko,地址是http://www.lag.net/paramiko/

解压缩
在dos下进 入解压缩的目录,运行

C:\python\python.exe setup.py build
C:\python\python.exe setup.py install

测试paramiko
运行python.exe,在提示符下输入:
Import  paramiko

如果没有出现错误提示,说明paramiko安装成功

 

三: 使用paramiko

如果大家感觉安装paramiko还是略有麻烦的话,当使用到paramiko提供的方便时便会觉得这是十分值得的。

下面是两种使用paramiko连接到linux服务器的代码

方式一:

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

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

方式二:

t = paramiko.Transport((“主机”,”端口”))
t.connect(username = “用户名”, password = “口令”)

如果连接远程主机需要提供密钥,上面第二行代码可改成:
t.connect(username = “用户名”, password = “口令”, hostkey=”密钥”)

 

下面给出实际的例子:

3.1 windows对linux运行任意命令,并将结果输出

如果linux服务器开放了22端口,在windows端,我们可以使用paramiko远程连接到该服务器,并执行任意命令,然后通过 print或其它方式得到该结果,

#!/usr/bin/python 
import paramikossh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用户名", "口令")
stdin, stdout, stderr = ssh.exec_command("你的命令")
print stdout.readlines()
ssh.close()

其中的”你的命令”可以任意linux支持的命令,如一些常用的命令:

df:查看磁盘使用情况
uptime:显示系统运行时间信息
cat:显示某文件内容
mv/cp/mkdir/rmdir:对文件或目录进行操作
/sbin/service/ xxxservice start/stop/restart:启动、停止、重启某服务
netstat -ntl |grep 8080:查看8080端口的使用情况
 或者 nc -zv localhost :查看所有端口的使用情况
find / -name XXX:查找某文件

这样一来,对于linux的任何操作几乎都可以通过windows端完成,如果对该功能进行引申,还可以同时管理多台服务器。

3.2 从widnows端下载linux服务器上的文件

#!/usr/bin/python 
import paramikot = paramiko.Transport((“主机”,”端口”))
t.connect(username = “用户名”, password = “口令”)
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/var/log/system.log'
localpath='/tmp/system.log'
sftp.get(remotepath, localpath)
t.close()

3.3 从widnows端上传文件到linux服务器

#!/usr/bin/python 
import paramiko
t = paramiko.Transport((“主机”,”端口”))
t.connect(username = “用户名”, password = “口令”)
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/var/log/system.log'
localpath='/tmp/system.log'
sftp.put(localpath,remotepath)
t.close()
Python 相关文章推荐
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
将python安装信息加入注册表的示例
Nov 20 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
python使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 #Python
python list使用示例 list中找连续的数字
Jan 27 #Python
Python批量修改文件后缀的方法
Jan 26 #Python
使用cx_freeze把python打包exe示例
Jan 24 #Python
Python的函数嵌套的使用方法
Jan 24 #Python
下载安装setuptool和pip linux安装pip    
Jan 24 #Python
python解析文件示例
Jan 23 #Python
You might like
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python多线程编程(一):threading模块综述
2015/04/05 Python
python打开windows应用程序的实例
2019/06/28 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
仓库门卫岗位职责
2013/12/22 职场文书
企业员工集体活动方案
2014/08/17 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
教师辞职信范文
2015/02/28 职场文书
初中班长竞选稿
2015/11/20 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
SQLServer之常用函数总结详解
2021/08/30 SQL Server
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技