【问题标题】:paramiko server mode port forwardingparamiko 服务器模式端口转发
【发布时间】:2012-11-14 19:14:09
【问题描述】:

我需要使用 paramiko 实现一个 ssh 服务器,它只处理“-R”端口转发请求,如下所示:

ssh -N -T -R 40005:destination_host:22 user@example.com

到目前为止,据我了解,我必须实现 ServerInterface.check_port_forward_request,然后在某个时间点创建一个套接字并监听指定的端口。任何通过 Channel/Connection 进来的数据都分别去 Connection/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 还是其他地方启动线程?

【问题讨论】:

    标签: python paramiko


    【解决方案1】:

    以下是来自 Paramiko 的反向端口转发来源的一个工作示例:

    https://github.com/paramiko/paramiko/blob/master/demos/rforward.py

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      相关资源
      最近更新 更多