zoukankan      html  css  js  c++  java
  • python之paramiko密钥库+密码登录

    #!/usr/local/anaconda3/bin/python
    # coding:utf-8
    
    # Create your views here.
    # ====================================================
    # Author: chang - EMail:changbo@hmg100.com
    # Last modified: 2017-07-11
    # Filename: downloadrem.py
    # Description: file upload ,base paramiko, sys, time
    # blog:http://www.cnblogs.com/changbo
    # ====================================================
    
    """
    1, 每日晚1:30分执行webserver控制台和项目日志的备份,脚本Path:/home/yunwei/jb/mvlogs.sh
    2,每日凌晨2:30分执行移动tar以外的已打包日志到回收站/tmp/trash(回收站定期)
    3,将保存的日志回传到本地各相关站点目录下
    4,每天22:30清空回收站
    5,初始化用户环境alias rm='mv --verbose -f --backup=numbered --target-directory /tmp/trash'
    6,find -not -name '*.tar.gz' |xargs mv -f --backup=numbered -t /tmp/trash/ 2>/dev/null
    """
    
    import paramiko
    import time
    import sys
    import threading
    
    
    ipList = ['xx.x.x.x']
    # accPwd = {ipList[0]: 'xxxxxxxxxx'}
    
    
    bakTime = time.strftime('%Y%m%d')
    filename = 'remdown' + bakTime + '.tar.gz'
    
    logPath = '/data'
    locHome = logPath + '/hkdaex/home/' + filename
    locTrade = logPath + '/hkdaex/trade/' + filename
    
    remHome = logPath + '/homelogs/' + filename
    remTrade = logPath + 'tradelogs/' + filename
    
    private_key = "F:\testcode\id_rsa"
    
    
    class SSHSession:
        def __init__(self, host, username='xxxxx', port=22):
            self.host = host
            self.port = port
            self.username = username
            # self.pwd =
    
        def connect(self):
            transport = paramiko.Transport((self.host, self.port))
            key = paramiko.RSAKey.from_private_key_file(private_key, 'xxxxxxxxxx')
            transport.connect(username=self.username, pkey=key)
            self.__transport = transport
    
        def close(self):
            self.__transport.close()
    
        def progressbar(self, transferred, toBeTransferred, suffix=''):
            bar_len = 60
            filled_len = int(round(bar_len * transferred / float(toBeTransferred)))
            percents = round(100.0 * transferred / float(toBeTransferred), 1)
            bar = '=' * filled_len + '-' * (bar_len - filled_len)
            sys.stdout.write('Download [%s] %s%s ...%s
    ' % (bar, percents, '%', suffix))
            sys.stdout.flush()
    
        # def getloadfile(self, target_path, local_path):u*TB4oCjdUZb2%m6
        def getloadfile(self):
            ssh = paramiko.SSHClient()
            ssh._transport = self.__transport
            stdin, stdout, stderr = ssh.exec_command('ls')
            print(stdout.read().decode())
            # sftp = paramiko.SFTPClient.from_transport(self.__transport)
            # print('Download remote log file :')
            # sftp.get(target_path, local_path, callback=self.progressbar)
            return 'success'
    
    
    def execDown():
        # try:
            ssh = SSHSession(ipList[0])
            ssh.connect()
            # status = ssh.getloadfile(remHome, locHome)
            # print(status)
            # status2 = ssh.getloadfile(remTrade, locTrade)
            status = ssh.getloadfile()
            print(status)
            ssh.close()
        # except Exception as e:
        #     print(e)
    
    if __name__ == '__main__':
        t1 = threading.Thread(target=execDown)
        t1.start()

    END!

  • 相关阅读:
    sqlserver 分布式连接方式
    介绍27款经典的CSS框架
    一些初级问题小总结
    WCF>一个运行环境,一个服务逻辑人,一个客户
    学习wcf过程的总结
    .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)(转)
    wcf一
    互联网用户能力解放带来的革命
    编程实现>ASP.NET 3.5开发范例精讲精析>探讨FormView控件
    互联网未来的趋势
  • 原文地址:https://www.cnblogs.com/changbo/p/7149878.html
Copyright © 2011-2022 走看看