python paramiko模块实现ssh远程控制
2012-06-15 16:11
826 查看
之前写了个通过Plink验证linux后台进程的脚本,可以满足在QTP对设备重启后进程情况的简单验证。领导鉴于此,对我说:眼看新员工就来了,公司规定新员工是没有登陆后台的,你能不能写个程序把用户名,密码之类的封装后获取后台文件的MD5值列表。。。
这是个问题,一开始没有什么头绪,因为这个就比上一个难了,上一个只是简单的执行一些后台shell,还是以文件形式执行的,plink貌似没有提供命令行选项去后台执行指令,所以想用python来解决了。和导师交流下,他说这个问题可以去看看Python的远程调试等等,不知道后来怎么说的,他告诉我说:这个非常简单,你把所有的东西都封到一个exe里就OK了,我倒。。。
按照他说的想法,我开始了我的设计:首先要有三个输入(当然这是逐步得到的结果,比较经济饿办法),这三个参数分别为待测试的设备IP,SSH后台的private
key file另外就是已经有的后台文件MD5值获取脚本(.py的),输出就是MD5值对比文件,也就是md5change.log。
明确了输入输出,就要想如何实现了,本来是想自己再实现一个MD5值对比脚本,主要是因为之前的MD5值对比脚本的输出是文本文件格式的,而我想得到的输出stdout里的,然后自己再处理。后来想想有现成的就别麻烦了,直接下载对比后结果就可以了。
所以细化了实现的办法:沟造一个sftp client端,用来和后台交互文件,因为后台提供了sftp server;构造一个ssh client端用来在后台执行命令,这两点都明确了就好办了,去google: python ssh会获得比较成熟的模块(我一直认为这就是工具)paramiko,paramiko提供的主要API之一就是SSHClient,调用它提供的API可以完成在后台执行指令,这里主要前后卡壳两次,一次是编写简单代码后,系统提示:Unknown
server ipaddress,这里网络上找了很久都没有进展,后来发现在构建简单的客户端之后添加
t.set_missing_host_key_policy(paramiko.AutoAddPolicy())
就可以解决问题,这主要是源于ssh2本身的设置,第二步卡壳是在pkey上,SSH2支持两种加密private key加密方式RSA和DSA,而我一直使用本地的.ppk文件,后台通过查询相关资料,ppk是putty自身能够识别的文件格式,所以在RSA或者DSS解密private key file(ppk)文件时总是提示Invilid key file,后来通过使用putty自带的puttygen.exe获取了Openssh格式的private
key file,这样才能正确的被paramiko.DSSKey.from_private_key_file(keyfile,password=password)读取,在这里也认识到了SSH2 public key authentication,即公钥验证的基本原理,这里大家可以参见:http://www.51testing.com/spacecp.php?action=spaceblogs&op=add&openwindow=1,
是一位强人的解释。
简单的SSH2 Client构建好了,就去执行指令了,这里执行的指令非常简单,一句而已。
然后就是想如何上传下载文件,因为都是需要认证的,而且paramiko的SSHClient本身提供了open_tftp()函数,可以建立连接然后put或者get文件,但为了我组内其它同事能够用更多的API,所以我使用tftp这个API,本身提供了get,put等文件操作。
最后一部就是将验证可运行无误的代码打包成为exe文件了,这里使用了py2exe,具体的打包办法可以参考http://www.chinaunix.net/jh/55/556861.html,比较老的帖子了,也比较简单。。。
打包完成之后尝试了下,没什么错误,OK了,就是一些调试信息忘记注释掉了。。。再打包一次又闲麻烦了,新人来了正好看调试信息~~~
这是个问题,一开始没有什么头绪,因为这个就比上一个难了,上一个只是简单的执行一些后台shell,还是以文件形式执行的,plink貌似没有提供命令行选项去后台执行指令,所以想用python来解决了。和导师交流下,他说这个问题可以去看看Python的远程调试等等,不知道后来怎么说的,他告诉我说:这个非常简单,你把所有的东西都封到一个exe里就OK了,我倒。。。
按照他说的想法,我开始了我的设计:首先要有三个输入(当然这是逐步得到的结果,比较经济饿办法),这三个参数分别为待测试的设备IP,SSH后台的private
key file另外就是已经有的后台文件MD5值获取脚本(.py的),输出就是MD5值对比文件,也就是md5change.log。
明确了输入输出,就要想如何实现了,本来是想自己再实现一个MD5值对比脚本,主要是因为之前的MD5值对比脚本的输出是文本文件格式的,而我想得到的输出stdout里的,然后自己再处理。后来想想有现成的就别麻烦了,直接下载对比后结果就可以了。
所以细化了实现的办法:沟造一个sftp client端,用来和后台交互文件,因为后台提供了sftp server;构造一个ssh client端用来在后台执行命令,这两点都明确了就好办了,去google: python ssh会获得比较成熟的模块(我一直认为这就是工具)paramiko,paramiko提供的主要API之一就是SSHClient,调用它提供的API可以完成在后台执行指令,这里主要前后卡壳两次,一次是编写简单代码后,系统提示:Unknown
server ipaddress,这里网络上找了很久都没有进展,后来发现在构建简单的客户端之后添加
t.set_missing_host_key_policy(paramiko.AutoAddPolicy())
就可以解决问题,这主要是源于ssh2本身的设置,第二步卡壳是在pkey上,SSH2支持两种加密private key加密方式RSA和DSA,而我一直使用本地的.ppk文件,后台通过查询相关资料,ppk是putty自身能够识别的文件格式,所以在RSA或者DSS解密private key file(ppk)文件时总是提示Invilid key file,后来通过使用putty自带的puttygen.exe获取了Openssh格式的private
key file,这样才能正确的被paramiko.DSSKey.from_private_key_file(keyfile,password=password)读取,在这里也认识到了SSH2 public key authentication,即公钥验证的基本原理,这里大家可以参见:http://www.51testing.com/spacecp.php?action=spaceblogs&op=add&openwindow=1,
是一位强人的解释。
简单的SSH2 Client构建好了,就去执行指令了,这里执行的指令非常简单,一句而已。
然后就是想如何上传下载文件,因为都是需要认证的,而且paramiko的SSHClient本身提供了open_tftp()函数,可以建立连接然后put或者get文件,但为了我组内其它同事能够用更多的API,所以我使用tftp这个API,本身提供了get,put等文件操作。
最后一部就是将验证可运行无误的代码打包成为exe文件了,这里使用了py2exe,具体的打包办法可以参考http://www.chinaunix.net/jh/55/556861.html,比较老的帖子了,也比较简单。。。
打包完成之后尝试了下,没什么错误,OK了,就是一些调试信息忘记注释掉了。。。再打包一次又闲麻烦了,新人来了正好看调试信息~~~
相关文章推荐
- Python paramiko模块 实现 ssh远程执行命令 上传下载文件 堡垒机模式下的远程命令执行
- Python调用paramiko模块实现远程管理多台服务器
- Python学习—paramiko模块实现简单的ssh与sftp
- python下paramiko模块实现ssh连接登录Linux服务器
- Python 模块功能paramiko SSH 远程执行及远程下载(可以使用)
- Python-远程管理-Paramiko实现ssh&sftp
- python paramiko实现ssh远程访问的方法
- python下paramiko模块实现ssh连接登录Linux服务器
- python paramiko实现ssh远程登录
- Python之Fabric模块 Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:
- python模块paramiko实现上传下载与远程执行命令的代码
- 使用python paramiko模块实现ssh与scp功能
- 项目总结(三)----------Python实现SSH远程登陆,并执行命令!
- python paramiko ssh远程连接
- python模块paramiko的上传下载和远程执行命令方法
- python用paramiko模块上传本地目录到远程目录
- 11-开发板接入小五物联实现远程控制(Wi-Fi模块,远程升级自己的程序)
- Linux下使用SSH和VNC实现图形化远程控制(Ubuntu 9.04环境)
- python模块学习之paramiko远程执行命令,文件上传、下载
- Python实现SSH远程登陆,并执行命令!