2012-07-02 16 views
19

Sto provando a fare qualche port forwarding da un'applicazione python usando paramiko. Posso impostare la connessione SSH bene, ma sono un po 'perplesso su come usare paramiko.transport. Ho già trovato this file, ma non riesco a capire cosa sta succedendo in esso. Osservando il paramiko.Transport docs, sembra che una singola riga usi la funzione open_channel, ma non riesco a capire come implementarla. Sto cercando di replicare un semplice ssh -L 8000: localhost: 8000.Port forwarding con paramiko

Qualcuno può darmi una mano?

+2

Così sono riuscito a ottenere un po 'più avanti con questo, e penso che stia probabilmente abbaiando dall'albero sbagliato. Ho capito come utilizzare il comando open_channel chiamando get_transport() sulla connessione origninale, ma quando provo ad aprire una connessione tcpip diretta o inoltrata, ottengo Amministrativamente Proibito dal server, che va bene con un -L port forward da una normale sessione SSH. Qualche idea? – TimD

+1

Puoi per favore pubblicare il tuo codice/una sezione del codice che stai utilizzando? –

risposta

14

Si prega di trovare qualche codice utilizzando paramiko-1.7.7.1, pycrypto-2.6 e il forward.py script da cui ho rimosso il codice dalla linea 115 fino alla fine (per evitare le opzioni di analisi).

import paramiko, sys 
from forward import forward_tunnel 

remote_host = "target_host" 
remote_port = 8000 
local_port = 8000 
ssh_host = "my_ssh_host" 
ssh_port = 22 

user  = "login" 
password = "s3cr3t" 

transport = paramiko.Transport((ssh_host, ssh_port)) 

# Command for paramiko-1.7.7.1 
transport.connect(hostkey = None, 
        username = user, 
        password = password, 
        pkey  = None) 

try: 
    forward_tunnel(local_port, remote_host, remote_port, transport) 
except KeyboardInterrupt: 
    print 'Port forwarding stopped.' 
    sys.exit(0) 

Ho testato con successo da una stazione di Windows, utilizzando un server ssh con Red Hat e che punta a un terzo server. (Sto usando Python 2.7.2)

Speranza che aiuta,

+2

Il collegamento 'forward.py' è rotto. Vedi questo: https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

È possibile utilizzare https://github.com/pahaz/sshtunnel

pip install sshtunnel 

Codice esempio:

import sshtunnel 

with sshtunnel.open(
    (ssh_host, ssh_port), 
    ssh_host_key=None, 
    ssh_username=ssh_user, 
    ssh_password=ssh_password, 
    ssh_private_key=None, 
    remote_bind_address=(REMOTE_HOST, REMOTE_PORT)) as server: 

    def do_something(port): 
     # Do something with port 
     pass 

    print("LOCAL PORT:", server.local_bind_port) 

    do_something(server.local_bind_port) 
+0

sembra che il rientro nell'esempio di codice non sia corretto ...? – Petri

+0

Il rientro non era corretto, modificato e corretto. – datashaman

+1

Questo pacchetto non effettua il port forwarding remoto, solo locale. – datashaman

Problemi correlati