• python Paramiko 模块远程管理主机


    #!/usr/bin/env python3
    
    # -*- coding: utf-8 -*-
    
    import paramiko
    import os, stat
    import sys
    import operator as op
    from string import Template
    
    def ssh_connect( _host, _username, _password ):
        _ssh_fd = paramiko.SSHClient()
        _ssh_fd.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
        _ssh_fd.connect( _host, username = _username, password = _password, timeout = 5 )
        return _ssh_fd
    
    def ssh_exec_cmd( _ssh_fd, _cmd ):
        return _ssh_fd.exec_command( _cmd )
    
    def ssh_sftp( _ssh_fd, _local_path, _remote_path ):
        _sftp = paramiko.SFTPClient.from_transport(_ssh_fd.get_transport())
        _sftp = _ssh_fd.open_sftp()
        _sftp.put(_local_path, _remote_path)
        #_sftp.get(_remote_path, _local_path)
        _sftp.close()
    
    def ssh_close( _ssh_fd ):
        _ssh_fd.close()
    
    def main(ip, password, fiperror, cmds, flag, local_path, remote_path):
        username = 'root'
     
        fip = open(fiperror,'a')
    
        cmds = cmds
        flag = flag
    
        try:
            sshd = ssh_connect( ip, username, password )
    
            if flag == '1':
                _local_path = local_path
                _remote_path = remote_path
                try:
                    ssh_sftp(sshd, _local_path, _remote_path)
                except Exception as e:
                    print('Error: sftp failed')
    
            for cmd in cmds:
                stdin, stdout, stderr = ssh_exec_cmd( sshd, cmd )
                err_list = []
                err_list = stderr.readlines()
    
                items = []
                items = stdout.readlines()
    
                for item in items:
                    print("{} {}".format(ip, item), end='')
                    s = Template("nova list --${host_name}")
                    s = s.safe_substitute(host_name=item)
    
            ssh_close( sshd )
        except Exception as e:
            print( 'ssh %s@%s: %s' % (username, ip, e) )
            fip.writelines([ip,"\t",password,"\n"])
            fip.close()
    
    if __name__ == "__main__":
        with open('iplist') as f:
        
            errfile = "/tmp/err.log"
            fd = open(errfile, 'w')
            fd.truncate()
            fd.close()
            local_path = ''
            remote_path = ''
            
            scp_flag = input('scp regular file? yes(input 1), no(input 0): ')
            if scp_flag == '1':
                local_path=input('local file path: ')
                remote_path=input('remote host path: ')
    
                local_path = os.path.join(os.getcwd(), local_path) 
            cmds = []
            cmd = input("input the cmd you want to execute(end with 0): ")
            while cmd != '0':
                cmds.append(cmd)
                cmd = input('input the cmd you want to execute(end with 0): ')
            for line in f:
                x = line.split()
                length = len(x)
                ip = x[0]
                if length == 1:
                    password = '123456'
                else:
                    password = x[1]
                print('---------------ip address: %s--------------' % ip)
                main(ip=ip, password=password, fiperror=errfile, cmds=cmds, flag=scp_flag, local_path=local_path, remote_path=remote_path)
    
  • 相关阅读:
    每天干攻防,都不会写驱动了
    SSD 坏了
    据说英雄联盟要出新皮肤了
    随便写点什么,证明我还活着,VS2010出现的问题
    ida 符号路径设置
    搭建一个自己的SVN服务器
    nginx+keepalived互为主主高可用配置
    nginx+keepalived主从高可用配置
    Lnamp的高级网站架构+动静分离+反向代理
    Nginx+PHP(FastCGI)高性能服务器加载redis+memcache模块
  • 原文地址:https://www.cnblogs.com/donggongdechen/p/8196459.html
Copyright © 2020-2023  润新知