paramiko模块

一、paramiko简介

paramiko是基于Python实现用于做远程控制的第三方模块,使用该模块可以对远程服务器进行命令或文件操作,支持认证及密钥方式,自动化运维管理工具fabric和ansible内部的远程管理功能就是使用paramiko来现实的。

官网地址:https://pypi.python.org/pypi/paramiko  

目前最新版本是2.0.0 

 

二、paramiko安装  

  paramiko支持pip、easy_install或源码安装方式,推荐使用pip安装paramiko 

  1、在pycharm中使用pip安装paramiko (Python3中需要先升级pip到8.1.2版本   升级命令:pip install --upgrade pip)

  下图是安装完成之后的截图。

    

  2、在CentOS6.6中使用pip安装paramiko

  pip3 install paramiko   

  安装过程中报错:

  

  解决办法:  yum install libffi libffi-devel

  

  检验安装结果,导入模块没有提示异常则说明安装成功:

  

 

三、paramiko的核心组件

  paramiko包含两个核心组件,分别是SSHClient类和SFTPClient类。

  SSHClient

  用于连接远程服务器并执行基本命令

  基于用户名密码连接   

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import paramiko
import sys

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.65.246', port=22, username='root', password='123,.abc')

# 执行命令
stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
# 获取命令结果
result,err = stdout.read(),stderr.read()
if not err:
    print(str(result,'utf-8'))
else:
    print(err)

# 关闭连接
ssh.close() 
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import sys
 5 import paramiko
 6 
 7 transport = paramiko.Transport(('192.168.65.246', 22))
 8 transport.connect(username='root', password='123,.abc')
 9 
10 ssh = paramiko.SSHClient()
11 ssh._transport = transport
12 
13 stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
14 
15 result = list(filter(lambda x: x is not None,[stdout.read(),stderr.read()]))[0]
16 print(str(result,'utf-8'))
17 
18 transport.close()
SSHClient 封装 transport

  基于公钥密钥连接 

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import paramiko
import sys

private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.65.246', port=22, username='root', pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
# 获取命令结果
result,err = stdout.read(),stderr.read()
if not err:
    print(str(result,'utf-8'))
else:
    print(err)

# 关闭连接
ssh.close() 
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import paramiko
 5 import sys
 6 
 7 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
 8 
 9 transport = paramiko.Transport(('192.168.65.246', 22))
10 transport.connect(username='root', pkey=private_key)
11 
12 ssh = paramiko.SSHClient()
13 ssh._transport = transport
14 
15 stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
16 result = list(filter(lambda x: x is not None,[stdout.read(),stderr.read()]))[0]
17 print(str(result,'utf-8'))
18 
19 transport.close()
SSHClient 封装 transport

  SFTPClient

  用于连接远程服务器并执行上传下载

  基于用户名密码上传下载  

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import paramiko
import sys

transport = paramiko.Transport(('192.168.65.246',22))
transport.connect(username='root',password='123,.abc')

sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/data/pyscripts/miyao.py', '/root/miyao.py')
# 将remove_path 下载到本地 local_path
sftp.get('/root/miyao.py', '/root/miyao.py')

transport.close()

  基于公钥密钥上传下载

 1 #!/usr/bin/python3
 2 # -*- coding:utf-8 -*-
 3 
 4 import paramiko
 5  
 6 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
 7  
 8 transport = paramiko.Transport(('192.168.65.246', 22))
 9 transport.connect(username='root', pkey=private_key )
10  
11 sftp = paramiko.SFTPClient.from_transport(transport)
12 # 将location.py 上传至服务器 /tmp/test.py
13 sftp.put('/data/pyscripts/sftp.py', '/root/test.py')
14 # 将remove_path 下载到本地 local_path
15 sftp.get('/root/test.py', '/root/sftp.py')
16  
17 transport.close()
View Code

 

注:代码中的主机均为VM虚拟机。

  

 

posted @ 2016-06-05 19:36  Rambotien  阅读(708)  评论(0编辑  收藏  举报