2012-07-02 27 views
19

Paramiko kullanarak bir python uygulamasından bazı port iletimi yapmaya çalışıyorum. SSH bağlantısını kurabilirim, fakat paramiko.transport'un nasıl kullanılacağı konusunda biraz şaşırdım. Zaten this file buldum, ama içinde neler olduğunu anlayamıyorum. Paramiko.Transport docs'a bakmadan, open_channel işlevini kullanan tek bir satır gibi görünüyor, ancak bunu nasıl uygulayacağımı bilemiyorum. Basit bir ssh -L 8000: localhost: 8000 çoğaltmaya çalışıyorum.Paramiko ile Port Yönlendirme

Herkes bana yardımcı olabilir mi?

+2

yüzden biraz daha ileri başardı ettik Bu, ve muhtemelen yanlış ağacın havlamasını düşünüyorum. Open_channel komutunu origninal bağlantıda get_transport() yöntemini arayarak nasıl çalıştıracağımı anladım, ancak benimle doğrudan veya iletilen bir tcpip bağlantısı açmaya çalıştığımda, sunucudan İdari Olarak Yasaklanırım. -L port normal SSH seansından ileriye doğru. Herhangi bir fikir? – TimD

+1

Lütfen kodunuzu/kullandığınız kodun bir bölümünü gönderir misiniz? –

cevap

14

(seçenekler ayrıştırmayı önlemek için) paramiko-1.7.7.1, pycrypto-2.6 ve ben sonuna kadar hat 115 kodu kaldırmalısınız vermedi hangi forward.py script kullanarak bazı kod bulabilirsiniz.

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) 

Red Hat altında ssh sunucusu kullanarak ve 3. bir sunucuya işaret ederek, Windows istasyonundan başarıyla test ettik.

+2

'forward.py' bağlantısı bozuk. Lütfen şunu görün: https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

Sen https://github.com/pahaz/sshtunnel

pip install sshtunnel 

Kod örneğini kullanabilirsiniz

Umarım yardımcı olur (ben Python 2.7.2 kullanıyorum):

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

kod örneğindeki girinti yanlış görünüyor ...? – Petri

+0

Girinti doğru, düzeltilmemiş ve düzeltilmemiş. – datashaman

+1

Bu paket yalnızca yerel bağlantı noktası iletimini gerçekleştirmiyor. – datashaman

İlgili konular