2012-11-27 23 views
5

muszę wdrożyć serwer ssh przy użyciu paramiko że tylko obsługuje żądania przekierowania portów „-R” tak:paramiko tryb portu serwera spedycja

ssh -N -T -R 40005:destination_host:22 [email protected] 

Tak daleko od tego, co rozumiem, będę musiał wdrożyć ServerInterface .check_port_forward_request iw pewnym momencie po, utwórz gniazdo i nasłuchuj podanego portu. Wszelkie dane, które przychodzi przez kanał/Connection przejdź do Connection/Channel odpowiednio

class Server (paramiko.ServerInterface): 
    . 
    . 
    . 
    def check_port_forward_request(self, address, port): 
     'Check if the requested port forward is allowed' 
     ... 
     return port 

def handler(chan, port): 
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    sock.bind(('', port)) 
    sock.listen(1) 
    conn, addr = s.accept()  

    while True: 
     r, w, x = select.select([conn, chan], [], []) 
     if conn in r: 
      data = conn.recv(1024) 
      if len(data) == 0: 
       break 
      chan.send(data) 
     if chan in r: 
      data = chan.recv(1024) 
      if len(data) == 0: 
       break 
      conn.send(data) 
    chan.close() 
    conn.close() 
    verbose('Tunnel closed from %r' % (chan.origin_addr,)) 

thr = threading.Thread(target=handler, args=(chan,server_port)) 
thr.setDaemon(True) 
thr.start() 

Jest to ogólna idea realizacji po stronie serwera przekazywania paramiko portu ssh? Czy powinienem rozpocząć wątek w check_port_forward_request lub gdzieś indziej?

Odpowiedz

Powiązane problemy