我需要使用paramiko实现一个SSH服务器,该服务器仅处理“-R”端口转发请求,如下所示:
ssh -N -T -R 40005:destination_host:22 [email protected]
到目前为止,据我所知,我将必须实现ServerInterface.check_port_forward_request,然后在某个时候创建一个套接字并监听指定的端口。通过 channel /连接的任何数据分别转到连接/ channel
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()
这是实现服务器端paramiko ssh端口转发的一般想法吗?
我应该在check_port_forward_request或其他地方启动线程吗?
最佳答案
这是Paramiko的反向端口转发源中的一个工作示例:
https://github.com/paramiko/paramiko/blob/master/demos/rforward.py
关于python - paramiko服务器模式端口转发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13579616/