简单的堡垒机链接

import paramiko
import threading


class ftpclient(object):
    def __init__(self):
        self.ssh = paramiko.SSHClient()

    def sftp_connect(self, hostname, port, username, passwd):
        transprot = paramiko.Transport((hostname, port))
        transprot.connect(username=username, password=passwd)
        self.sftp = paramiko.SFTPClient.from_transport(transprot)

    def ssh_connect(self, hostname, port, username, passwd):
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.ssh.connect(hostname=hostname, port=port, username=username, password=passwd)

    def cmd_ssh(self, *args):
        while True:
            cmd = input(">>>")
            if cmd == 'q':
                exit()
            stin, stdout, stderr = self.ssh.exec_command(cmd)
            res, err = stdout.read(), stderr.read()
            result = res if res else err
            print(result.decode())

    def interactive(self):
        while True:
            cmd = input(">>>").strip()
            if not cmd:
                continue
            if cmd == 'q':
                exit()
            cmd_str = cmd.split()[0]
            if hasattr(self, "%s" % cmd_str):  #判断用户输入的命令是否存在
                func = getattr(self, "%s" % cmd_str) # 如果self对象中有属性cmd_str则打印cmd_str的值
                func(cmd)

    def get(self, *args):
        filename = args[0].split()[1]
        self.sftp.put(filename, filename)


host_list = ['192.168.15.94', '192.168.15.210']
host_action = ["Action", "Put"]


def login():
    while True:
        port = input("请输入端口>>>").strip()
        if port.isdigit():
            port = int(port)
        else:
            continue
        username = input("请输入用户名>>>").strip()
        if not username:
            print("用户为空")
            continue
        elif username.isdigit():
            print("无数字开头用户")
            continue
        passwd = input("请输入密码>>>").strip()
        if not passwd:
            print("密码为空")
            continue
        return [port, username, passwd]   #转为一个列表


def main():
    while True:
        for index, host in enumerate(host_list):
            print(index, host)
        choice_host = input("请输入你要进去的主机列表>>>").strip()
        if choice_host.isdigit() and int(choice_host) < len(host_list):
            choice_host = int(choice_host)
            print('\033[41;1m %s \033[0m' % (host_list[choice_host]))
            print("\t")
        else:
            continue

        for index2, host2 in enumerate(host_action):
            print(index2, host2)
        choice_host_action = input("请输入你做的操作>>>").strip()
        if choice_host_action.isdigit() and int(choice_host_action) < len(host_action):
            choice_host_action = int(choice_host_action)
            print('\033[41;1m %s \033[0m' % (host_action[choice_host_action]))
            print("\t")

        hostname = host_list[int(choice_host)]
        if choice_host_action == 0:
            while True:
                connect_list = login()
                port = connect_list[0]
                username = connect_list[1]
                passwd = connect_list[2]
                try:
                    ftp = ftpclient()
                    ftp.ssh_connect(hostname, port, username, passwd)
                    ftp.cmd_ssh()
                except ImportError as e:
                    print("有错误")
        elif choice_host_action == 1:
            while True:
                connect_list = login()
                port = connect_list[0]
                username = connect_list[1]
                passwd = connect_list[2]
                try:
                    sftp = ftpclient()
                    sftp.ssh_connect(hostname, port, username, passwd)
                    sftp.cmd_ssh()
                except ImportError as e:
                    print("有错误")
        else:
            print("没有这个编号!!")

p = threading.Thread(target=main,args=())
p.start()

  

posted @ 2018-01-03 15:09  橙子味的萝卜  阅读(545)  评论(0编辑  收藏  举报