Python Paramiko模块与MySQL数据库操作

Python Paramiko模块与MySQL数据库操作

Paramiko模块批量管理:
通过调用ssh协议进行远程机器的批量命令执行.

要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。

一、安装:

1:安装gcc和python-devel

yum install gcc  gcc-c++ python-devel      #安装所需环境

2:  paramiko依赖pycrypto模块,要先下载pycrypto安装

wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz

解压后进入主目录执行下面命令:

python setup.py build
python setup.py install

3:下载paramiko进行安装

wget http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz

解压后进入主目录执行下面命令

python setup.py build
python setup.py install

4: 修改配置

在python的命令行模式下面导入模块,进行测试:

import paramiko

结果提示错误如下:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/__init__.py", line 69, in <module>
    from transport import SecurityOptions, Transport
  File "/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/transport.py", line 32, in <module>
    from paramiko import util
  File "/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/util.py", line 32, in <module>
    from paramiko.common import *
  File "/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/common.py", line 98, in <module>
    from Crypto import Random
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in <module>
    from Crypto.Random import _UserFriendlyRNG
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in <module>
    from Crypto.Random.Fortuna import FortunaAccumulator
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, in <module>
    import FortunaGenerator
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaGenerator.py", line 34, in <module>
    from Crypto.Util.number import ceil_shift, exact_log2, exact_div
  File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in <module>
    if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

解决方法:

进入/usr/lib64/python2.6/site-packages/Crypto/Util/number.py ,注解下面两行

#if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
# _warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)

二、paramiko模块:

SSHClient

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

基于用户名密码连接:

#!/usr/bin/env python
# encoding: utf-8

import paramiko

#记录日志
paramiko.util.log_to_file('paramiko.log') 
 #创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程主机
ssh.connect(hostname='10.10.100.100',port=22,username='root',password='******')
#执行命令(输入,输出,错误返回结果)
stdin,stdout,stderr=ssh.exec_command('free -m')
#读取stdout命令结果
result = stdout.read()
#输出并打印出结果.
print result
# 关闭连接 
SSHClient 封装 Transport:
import paramiko

paramiko.util.log_to_file('paramilo.log')
transport = paramiko.Transport(('10.10.100.110', 22))
transport.connect(username='www', password='***')

ssh = paramiko.SSHClient()
ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command('df -Th')
print stdout.read()

transport.close()
SSHClient 封装 Transport

三、使用Key连接远程:

本机生成key :ssh-keygen

#!/usr/bin/env python
# encoding: utf-8

import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/www/.ssh/id_rsa')  #本机私钥文件
 
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='ip', port=22, username='www', pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()
import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/www/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='www', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
transport.close()
SSHClient 封装 Transport

SFTPClient

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

基于用户名密码上传下载:

 1 import paramiko
 2 
 3 transport = paramiko.Transport(('hostname',22))
 4 transport.connect(username='www',password='****')
 5 sftp = paramiko.SFTPClient.from_transport(transport)
 6 # 将location.py 上传至服务器 /tmp/test.py
 7 sftp.put('/tmp/parmiko1.py', '/tmp/test.py')
 8 # 将remove_path 下载到本地 local_path
 9 sftp.get('remove_path', 'local_path')
10 
11 transport.close()

基于公钥密钥上传下载:

 1 import paramiko
 2  
 3 private_key = paramiko.RSAKey.from_private_key_file('/home/www/.ssh/id_rsa') 
 4 transport = paramiko.Transport(('hostname', 22))
 5 transport.connect(username='www', pkey=private_key )
 6 sftp = paramiko.SFTPClient.from_transport(transport)
 7 # 将location.py 上传至服务器 /tmp/test.py
 8 sftp.put('/tmp/paramiko1.py', '/tmp/test.py')
 9 # 将remove_path 下载到本地 local_path
10 sftp.get('remove_path', 'local_path')
11 transport.close

Python paramiko模块使用实例:

#!/usr/bin/env python
#coding:utf-8
import paramiko

print """iplist.txt

        10.10.100.127 user1 user1@123
        10.10.100.128 user1 user1@123
        10.10.100.129 user1 user1@123
        10.10.100.130 user1 user1@123
"""

def param_login():
        # paramiko.util.log_to_file('paramiko.log')
        # s = paramiko.SSHClient()
        # s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # try:
        #         s.connect(hostname=ip,port=22,username=username,password=passwd)
        #         stdin, stdout, stderr = s.exec_command('free -m')
        #         print u"ip地址是%s的执行结果为:" %(ip),"
",stdout.read()
        # except:
        #         return "None"
        # s.close()

        #SSHClient 封装 Transport:
        paramiko.util.log_to_file('paramilo.log')
        try:
                transport = paramiko.Transport((ip, 22))
                transport.connect(username=username, password=passwd)
                ssh = paramiko.SSHClient()
                ssh._transport = transport
                stdin, stdout, stderr = ssh.exec_command('df -Th')
                print u"

相关推荐