2012-07-02 12 views
19

Próbuję wykonać przekierowania portów z aplikacji Pythona przy użyciu paramiko. Mogę skonfigurować połączenie SSH w porządku, ale jestem trochę zaskoczony, jak korzystać z paramiko.transport. Znalazłem już this file, ale nie mogę zrozumieć, co się w nim dzieje. Patrząc na paramiko.Transport docs, wydaje się, że jedna linia korzysta z funkcji open_channel, ale nie wiem, jak to zaimplementować. Próbuję replikować prosty ssh-L 8000: localhost: 8000.Przekazywanie portów za pomocą paramiko

Czy ktoś może mi pomóc?

+2

Więc udało mi się trochę dalej z to i myślę, że prawdopodobnie szczerzę złe drzewo. Dowiedziałem się, jak obsługiwać komendę open_channel, wywołując funkcję get_transport() na połączeniu origninal, ale kiedy próbuję otworzyć z nią bezpośrednie lub przekazywane połączenie tcpip, otrzymuję administracyjną blokadę z serwera, co jest w porządku z -L port do przodu z normalnej sesji SSH. Jakieś pomysły? – TimD

+1

Czy możesz przesłać swój kod/fragment kodu, którego używasz? –

Odpowiedz

14

Proszę znaleźć jakiś kod za pomocą paramiko-1.7.7.1, pycrypto-2.6 i forward.py script z którego usunął kod z linii 115 do końca (w celu uniknięcia opcji parsowania).

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) 

Przetestowałem ją z powodzeniem od stacji Windows za pomocą serwera ssh pod Red Hat i skierowanej do 3rd serwerze. (Używam Python 2.7.2)

Nadzieja pomaga,

+2

Łącze 'forward.py' jest zepsute. Proszę zobaczyć ten: https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

Można użyć https://github.com/pahaz/sshtunnel przykład

pip install sshtunnel 

Kod:

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

wygląda na wcięcie w przykładzie kodu jest niepoprawny ...? – Petri

+0

Wcięcie nie było prawidłowe, edytowane i naprawione. – datashaman

+1

Ten pakiet nie wykonuje zdalnego przekazywania portów, tylko lokalny. – datashaman

Powiązane problemy