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()
三、使用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()