tôi cần phải thực hiện một máy chủ ssh sử dụng paramiko mà chỉ xử lý các yêu cầu cổng chuyển tiếp '-R' như thế này:paramiko chuyển tiếp
ssh -N -T -R 40005:destination_host:22 [email protected]
Cho đến nay từ những gì tôi hiểu tôi sẽ phải thực hiện ServerInterface .check_port_forward_request và tại một số điểm sau, tạo một ổ cắm và lắng nghe cổng được chỉ định. Bất kỳ dữ liệu nào đi qua Kênh/Kết nối đều đi tới Kết nối/Kênh tương ứng
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()
Đây có phải là ý tưởng chung đằng sau việc triển khai chuyển tiếp cổng ssh paramiko phía máy chủ không? Tôi có nên bắt đầu chuỗi bên trong check_port_forward_request hoặc ở một nơi khác không?