paramiko及簡單多進程

paramiko 具體就不多說,看其他資料

yum insatll python-devel

1.PyCrypto安裝

tar -xf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1/
python setup.py build && python setup.py install

2.ecdsa安裝

unzip python-ecdsa-master.zip
cd python-ecdsa-master
python setup.py install

3.paramiko安裝

unzip paramiko-master.zip
cd paramiko-master
python setup.py build && python setup.py install

4.錯誤:

>>> import paramiko
/usr/lib64/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
>>> exit()

解決:

tar -xf gmp-5.1.1.tar.bz2
cd gmp-5.1.1
./configure
make
make install
yum remove gmp

5.簡單多進程:

#!/usr/bin/python   
import paramiko  
import os
import sys
import time
import multiprocessing
import datetime

ip_list = []

def Execmd(host,cmd):
    time.sleep(2)
    hostname=host
    username="ckl"

    ssh=paramiko.SSHClient()
    ssh.load_system_host_keys()
    privatekey = os.path.expanduser('/home/chenkangle/key/ckl.pem')
    key = paramiko.RSAKey.from_private_key_file(privatekey)

    ssh.connect(hostname=hostname,username=username,pkey = key)
    stdin,stdout,stderr=ssh.exec_command(cmd)
    print stdout.read()
    ssh.close()

def Upfile(host_ip,local_path,remote_path):
    time.sleep(2)
    privatekey = os.path.expanduser('/home/ckl/.ssh/id_rsa')
    key=paramiko.RSAKey.from_private_key_file(privatekey)
    scp = paramiko.Transport((host_ip, 22))
    scp.connect(username='ckl', pkey=key)

    sftp = paramiko.SFTPClient.from_transport(scp)
    src = local_path
    des = remote_path
    file=os.path.basename(src)
    print '='*50
    print 'Start to upload file %s ' % datetime.datetime.now()
    print 'Upload file:',file
    sftp.put(local_path,remote_path)
    scp.close()
    print '\033[1;32m Upload file success %s \033[0m' % datetime.datetime.now()
    print '='*50

def Downfile(host_ip,remote_path,local_path):
    privatekey = os.path.expanduser('/home/chenkangle/key/ckl.pem')
    key=paramiko.RSAKey.from_private_key_file(privatekey)
    scp = paramiko.Transport((host_ip, 22))
    scp.connect(username='ckl', pkey=key)

    sftp = paramiko.SFTPClient.from_transport(scp)
    src = remote_path
    file=os.path.basename(src)
    des = local_path
    print '='*50
    print 'Start to download file %s ' % datetime.datetime.now()
    print 'Download file:',file
    sftp.get(src,des)
    scp.close()
    print '\033[1;32m download file success %s \033[0m' % datetime.datetime.now()
    print '='*50

def all_ip():
    f = file('2.txt','r')
    c = f.readlines()
    for x in c:
        ip = x.split('\n')[0]
        ip_list.append(ip)
    f.close()


if __name__=='__main__':
    all_ip()
    pool = multiprocessing.Pool(processes=30)
    threads = []
    print "Begin......"
    for i in ip_list:
        #pool.apply_async(Execmd,(i,))
        pool.apply_async(Upfile,(i,'/home/chenkangle/php_0420.tar.gz','/tmp/soft/php_0420.tar.gz'))
    pool.close()
    pool.join()

    for res in threads:
        print res.get()
    print "process done."

6.說明:

 2.txt 是一個列表文件

 內容如下:

10.1.1.1
10.1.1.2
10.1.1.3
....

  通過進程池poll批量操作,控制同時運行的進程processes=30

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章