python之旅十【第十篇】paramiko模块

paramiko模块介绍

ssh的远程连接

基于用户名密码的连接

 1 import paramiko
 2
 3 # 创建SSH对象
 4 ssh = paramiko.SSHClient()
 5 # 允许连接不在know_hosts文件中的主机
 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 7 # 连接服务器
 8 ssh.connect(hostname=‘x.x.x.x‘, port=22, username=‘xiaoli, password=‘123456‘)
 9
10 # 执行命令
11 stdin, stdout, stderr = ssh.exec_command(‘df‘)
12 # 获取命令结果
13 result = stdout.read()
14
15 # 关闭连接
16 ssh.close()

基于封装的transport的连接

 1 import paramiko
 2
 3 #1 创建transport对象
 4 transport = paramiko.Transport((‘x.x.x.x‘, 22))
 5 transport.connect(username=‘xiaoli‘, password=‘123456‘)
 6
 7 ssh = paramiko.SSHClient()
 8 ssh._transport = transport
 9
10 stdin, stdout, stderr = ssh.exec_command(‘df‘)
11 print stdout.read()
12
13 transport.close()

基于公钥密钥连接

 1 跟密码连接差不多,只是密码的地方变成了私钥
 2
 3 import paramiko
 4
 5 #私钥路径
 6 private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)
 7
 8 # 创建SSH对象
 9 ssh = paramiko.SSHClient()
10 # 允许连接不在know_hosts文件中的主机
11 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
12 # 连接服务器
13 ssh.connect(hostname=‘x.x.x.x, port=22, username=‘xiaoli, key=private_key)
14
15 # 执行命令
16 stdin, stdout, stderr = ssh.exec_command(‘df‘)
17 # 获取命令结果
18 result = stdout.read()
19
20 # 关闭连接
21 ssh.close()

基于封装的transport的连接

 1 同理,跟上边的差不多
 2
 3 import paramiko
 4
 5 private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)
 6
 7 transport = paramiko.Transport((‘x.x.x.x‘, 22))
 8 transport.connect(username=‘xiaoli‘, pkey=private_key)
 9
10 ssh = paramiko.SSHClient()
11 ssh._transport = transport
12
13 stdin, stdout, stderr = ssh.exec_command(‘df‘)
14
15 transport.close()

时间: 2024-10-18 14:11:41

python之旅十【第十篇】paramiko模块的相关文章

【Python之旅】第六篇(七):开发简易主机批量管理工具

通过前面对Paramiko模块的学习与使用,以及Python中多线程与多进程的了解,依此,就可以开发简易的主机批量管理工具了. 显然批量管理主机时,程序如果能并发执行功能是最好的,因为这样可以最大程度地利用CPU的性能,因此这就需要使用Python多线程或者多进程,基于学习的需要,这里主要使用多进程来进行开发,当然,这会存在一定问题,后面会说. 主要内容如下: 1.主机批量管理工具功能 2.设计框架 3.实现:数据库信息与程序源代码 4.实战演示 5.程序的不足 6.在写程序过程中的经验教训 7

【Python之旅】第五篇(四):基于Python Sockct多线程的简版SSH程序

还是继续延续篇五中前三节的例子,通过对代码的修修补补,把它改成一个可以在连接后就能在Client端执行Server端命令的程序,所以就有点类似于SSH连接程序了. 至于还是用前面的例子来改嘛,是因为上课也一直这么干,而且老师也讲得非常不错,自己吸收后也作为一个学习的记录吧,因为确实是非常不错的! 之所以能对前面的例子如这样的修改,应当有这样的思想:前面的例子中,Server端能够返回Client端输入的字符串,那么如果Client端输入的是Linux的shell命令,Server端是否可以执行这

【Python之旅】第五篇(二):Python Socket单线程+阻塞模式

前面第五篇(一)中的一个Socket例子其实就是单线程的,即Server端一次只能接受来自一个Client端的连接,为了更好的说明socket单线程和阻塞模式,下面对前面的例子做修改. 1.单线程+阻塞+交互式 前面的例子是单线程阻塞和非交互式的,现在改写为交互式的,即不会执行一次就结束,希望达到的效果是,发送的数据由User输入,然后Server端进行接收. Server端:与上个例子一样,并没有什么变化 import socket                #导入socket类   HO

【Python之旅】第五篇(一):Python Socket通信原理

只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理. 1.Socket socket也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.可以列举中国移动或者是中国电信等的电话客服,当然,也可以看下面的图片来作形象的说明. socket起源于Unix,而Unix/Linux基本哲学之一就是:一切皆文件,即都可以用"打开open-

【Python之旅】第三篇(一):Python函数

说明: 使用函数可以使程序实现功能模块化,大大简洁我们的程序,这里主要讨论Python中函数的下列内容: 1.函数定义与函数参数 2.局部变量和全局变量 3.函数默认参数和关键参数 4.*Args和**Kargs 因为函数部分内容跟C语言中的很多内容都十分相似,所以会结合C语言来进行对比学习. 1.函数定义与函数参数 --基本格式1:不参参数 ·定义: def sayHi():     print "Hello!" ·调用: >>> sayHi() Hello --基

【Python之旅】第八篇:开发监控软件的思想与流程

最近两周时间里,一直都在学习监控软件的开发,虽然是简版的,可是在这个过程当中,对于要开发一个监控软件的大概框架和流程还真的学习了很多东西,而且也想,这些知识实在是很难通过看文章或者是书籍能学习得到,只有自己亲自去实践过,我想才可以慢慢体会到这中间的不易吧.而通过这样一个过程,发现自己在这方面的思想枷锁也慢慢地打开,也才慢慢体会到那种乐趣吧.这里,真的是非常感谢Alex老师非常精彩的讲解. 监控软件的大概流程如下:     当然,实际中学习的过程中并没有去监控MySQL或者是ngnix,而只是监控

【Python之旅】第七篇(一):再谈Python多线程

主要是再进一步加深Python中关于多线程相关函数join()的理解以解多线程的执行过程.这里通过下面的例子来作进一步的说明. 1.多线程与主程序代码的执行顺序关系 给出下面程序代码: #!/usr/bin/env python import threading import time def sayHi(n): time.sleep(1) print 'Hi this is thread %s' %n thread_list = []    #用来存放多线程执行返回的函数入口,因此这里存放的是

【Python之旅】第七篇(二):Redis使用基础

由于学习开发监控软件的需要,因此需要使用到Redis,这里简单介绍. 1.安装 可以查看这里的文章:http://www.linuxidc.com/Linux/2014-05/101544.htm 2.启动 由于采用的是源码安装的方式,所以直接进入src目录,启动redis-server: [email protected]:/mnt/hgfs/Python/day7/redis-2.8.9/src$ ./redis-server  [12681] 16 Oct 00:06:52.964 # W

【Python之旅】第六篇(四):Python多线程锁

    在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来说一说. 1.给线程加锁的原因 我们知道,不同进程之间的内存空间数据是不能够共享的,试想一下,如果可以随意共享,谈何安全?但是一个进程中的多个线程是可以共享这个进程的内存空间中的数据的,比如多个线程可以同时调用某一内存空间中的某些数据(只是调用,没有做修改). 试想一下,在某一进程中,内存空间中存有一个变量对象的值为num=8,假如某一时刻有多个线程需要同时使用这个对象,出于这些线程要实现不同功能的需要,线程A需要将n

【Python之旅】第四篇(一):Python装饰器

有时候拿到一个程序接口,需要对其进行扩展,但是又不能修改原来接口的源代码,这时候就需要使用装饰器了. 有下面一个小程序,假如是别人提供给我们的调用接口: import time def sayHi():         time.sleep(1)         print 'Hello, I am xpleaf.' 一般情况下,如果想要计算该程序的执行时间(因为有可能要对该接口进行某些性能上的测试),就需要把以上接口修改为下面这样,同时执行一下: 程序代码: import time def s