TransWikia.com

Conectar em um host via SSH e ir para outro com o túnel ssh - Python

Stack Overflow em Português Asked by Danilo Marquiori on September 27, 2021

O código abaixo (main.py) realiza o acesso a um host através do SSH e cria um tunel para o IP ser acessado por 127.0.0.1:

import paramiko
from sshtunnel import SSHTunnelForwarder
from paramiko import SSHClient

class SSH:
    def __init__(self):
        self.ssh = SSHClient()
        self.ssh.load_system_host_keys()
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.ssh.connect(hostname='127.0.0.1',port='22',username='teste',password='teste')

        def exec_cmd(self,cmd):
            stdin,stdout,stderr = self.ssh.exec_command(cmd)
            if stderr.channel.recv_exit_status() != 0:
                print (stderr.read())
            else:
                print (stdout.read())


server = SSHTunnelForwarder(
    '192.168.1.1',
    ssh_username="teste2",
    ssh_password="teste2",
    remote_bind_address=('127.0.0.1', 22),
    local_bind_address=('0.0.0.0', 10022)
)

server.start()

if __name__ == '__main__':
    ssh = SSH()
    stdin,stdout,stderr = ssh.ssh.exec_command("hostname")
    retorno = stdout.read()
    print (retorno)

server.stop()

Estou tentando acessar uma máquina específica mas para isso, tenho que acessar uma máquina inicialmente por razões de rede.

A topologia acessada pelo Putty é: acessar a conexão inicial (aquela para a qual você criou as regras de rede) e criar um tunel SSH para o IP que deseja. Com isso acessando novamente o putty informando o IP 127.0.0.1 mais a porta do seu tunel chegará a máquina desejada.

Basicamente acesso inicial e vou para outra maquina dentro da rede

----------------------------------------------------------------------
                            |
-------------+              |    +----------+               +---------+
      HOST   |              |    |   HOST   |               |   HOST  |
    MAIN.PY  | -- SSH ----> |    |  INITIAL | -- TUNNEL --> |  WANTED |
-------------+              |    +----------+               +---------+
                            |
----------------------------------------------------------------------

Conforme declarado no código acima, só consigo acessar o primeiro host. Alguém pode me ajudar?

One Answer

tente fazer a seguinte alteração:

    server = SSHTunnelForwarder(
    '192.168.1.1',
    ssh_username="teste2",
    ssh_password="teste2",
    remote_bind_address=('<IP do HOST Destino>', 22),
    local_bind_address=('127.0.0.1', 10022) # Aqui você deixa o ip de loopback
)

Espero ter ajudado

Correct answer by Leandro Bigui on September 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP