2012-07-02 40 views
19

Tôi đang cố thực hiện một số chuyển tiếp cổng từ ứng dụng python bằng cách sử dụng paramiko. Tôi có thể thiết lập kết nối SSH chỉ tốt, nhưng tôi là một chút stumped như thế nào để sử dụng paramiko.transport. Tôi đã tìm thấy this file, nhưng tôi không thể tìm ra những gì đang diễn ra trong đó. Nhìn vào paramiko.Transport docs, có vẻ như là một dòng duy nhất sử dụng hàm open_channel, nhưng tôi không thể tìm ra cách để thực hiện điều đó. Tôi đang cố gắng để tái tạo một ssh -L 8000 đơn giản: localhost: 8000.Chuyển tiếp cổng với paramiko

Có ai có thể giúp tôi không?

+2

Vì vậy, tôi đã quản lý để có được một chút nữa với điều này, và nghĩ rằng tôi có thể sủa cây sai. Tôi đã làm việc ra cách vận hành lệnh open_channel bằng cách gọi get_transport() trên kết nối origninal, nhưng sau đó khi tôi cố gắng mở một kết nối trực tiếp hoặc chuyển tiếp tcpip với nó, tôi bị cấm quản trị từ máy chủ, -L cổng chuyển tiếp từ một phiên SSH bình thường. Bất kỳ ý tưởng? – TimD

+1

Bạn có thể vui lòng đăng mã của mình/một phần mã bạn đang sử dụng không? –

Trả lời

14

Vui lòng tìm một số mã sử dụng paramiko-1.7.7.1, pycrypto-2.6forward.py script mà từ đó tôi đã xóa mã khỏi dòng 115 đến cuối (để tránh phân tích tùy chọn).

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) 

Tôi đã thử nghiệm thành công từ một trạm Windows, sử dụng máy chủ ssh trong Red Hat và trỏ đến máy chủ thứ 3. (Tôi đang sử dụng Python 2.7.2)

Hy vọng nó giúp,

+2

Liên kết 'forward.py' bị hỏng. Vui lòng xem cái này: https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

Bạn có thể sử dụng https://github.com/pahaz/sshtunnel

pip install sshtunnel 

Mã dụ:

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

trông giống như thụt đầu dòng trong ví dụ mã không đúng ...? – Petri

+0

Thụt lề là không chính xác, chỉnh sửa và cố định. – datashaman

+1

Gói này không thực hiện chuyển tiếp cổng từ xa, chỉ cục bộ. – datashaman

Các vấn đề liên quan