具有多线程功能的Paramiko SSHtunnel

时间:2018-07-25 03:05:48

标签: python python-3.x python-multithreading paramiko ssh-tunnel

您好,我尝试寻找一个示例,但未成功。有没有人有我可以阅读和研究的例子?

问题:

Jumpbox1没有访问我直接需要访问的主机的权限,但是我具有root访问权限和Python3。 Jumpbox2我没有root访问权限,也没有python3。 (也不会安装...)

目标:

    Jumpbox1和Jumpbox2之间的
  1. ssh隧道/代理

  2. 通过1条ssh隧道到多个主机的多线程或并发ssh连接。

                              [Jumpbox1]
                                  |
                                  |
                              [Jumpbox2]
                                 /|\
                                / | \
                               /  |  \
                              /   |   \
                            [H1] [H2] [H3]
    

我正在尝试执行此操作,因为在某些情况下,我需要将数千个终端设备放入ssh,并且我不想每次需要访问主机时都将ssh放入Jumpbox2一千次。

如果在Paramkio中有任何人知道如何做到这一点,请告诉我,我一直在努力寻找可以做到这一点的任何事情。或者我只是不在正确的地方寻找。

我有一个课程,我负责ssh / telnet的大部分后端工作,并且我希望能够为该类添加“ ssh隧道或端口转发”。以下是我用于线程作业的内容,它查找远程主机的软件并根据一些变量动态执行不同的命令。但我希望能够做到这一点,如图所示。

所以先隧道,然后将所有线程都通过隧道。

示例代码不是完整的代码,仅是示例

def SSH_WORK(host):
    try:
        host=host.strip('\n')
        session = tools.Login(host)#Login via SSH/Telnet
        send = session['send']
        list1 = list(['\n\n*************** ' + host + ' ***************\n\n', ])
        for line in session['commands']: # Send a list of commands from a command file
            send(line.encode().strip() + b'\r')
            time.sleep(CommandDelay)
        session['read'] == 1:output = session['session'].recv(500000).decode().split('\n') #SSH read
        for l in output: ##### Strip any keywords we dont want to see and append to local list
            if any(n in l for n in session['dontprint']):continue
            list1.append(l)
    except: ##### On Failure, Log device
        list1 = list(['\nCould not log in to ' + host])

    report.append(list1)  #Append local list to global list


###### Start of SSH/Telnet Pool Script ######
concurrent = futures.ThreadPoolExecutor(max_workers)

with concurrent as ex:
    ex.map(SSH_WORK, hostnames)
hostnames.close()

0 个答案:

没有答案