# public tomspur /ipython forked from ipython/ipython

### Subversion checkout URL

You can clone with HTTPS or Subversion.

Fetching contributors…

Cannot retrieve contributors at this time

file 89 lines (74 sloc) 3.454 kb
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 ## This file is adapted from a paramiko demo, and thus licensed under LGPL 2.1.# Original Copyright (C) 2003-2007 Robey Pointer # Edits Copyright (C) 2010 The IPython Team## Paramiko is free software; you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation; either version 2.1 of the License, or (at your option)# any later version.## Paramiko is distrubuted in the hope that it will be useful, but WITHOUT ANY# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License# along with Paramiko; if not, write to the Free Software Foundation, Inc.,# 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA."""Sample script showing how to do local port forwarding over paramiko.This script connects to the requested SSH server and sets up local portforwarding (the openssh -L option) from a local port through a tunneledconnection to a destination reachable from the SSH server machine."""from __future__ import print_functionimport loggingimport selectimport SocketServerlogger = logging.getLogger('ssh')class ForwardServer (SocketServer.ThreadingTCPServer):    daemon_threads = True    allow_reuse_address = True    class Handler (SocketServer.BaseRequestHandler):    def handle(self):        try:            chan = self.ssh_transport.open_channel('direct-tcpip',                                                   (self.chain_host, self.chain_port),                                                   self.request.getpeername())        except Exception, e:            logger.debug('Incoming request to %s:%d failed: %s' % (self.chain_host,                                                              self.chain_port,                                                              repr(e)))            return        if chan is None:            logger.debug('Incoming request to %s:%d was rejected by the SSH server.' %                    (self.chain_host, self.chain_port))            return        logger.debug('Connected! Tunnel open %r -> %r -> %r' % (self.request.getpeername(),                                                            chan.getpeername(), (self.chain_host, self.chain_port)))        while True:            r, w, x = select.select([self.request, chan], [], [])            if self.request in r:                data = self.request.recv(1024)                if len(data) == 0:                    break                chan.send(data)            if chan in r:                data = chan.recv(1024)                if len(data) == 0:                    break                self.request.send(data)        chan.close()        self.request.close()        logger.debug('Tunnel closed ')def forward_tunnel(local_port, remote_host, remote_port, transport):    # this is a little convoluted, but lets me configure things for the Handler    # object. (SocketServer doesn't give Handlers any way to access the outer    # server normally.)    class SubHander (Handler):        chain_host = remote_host        chain_port = remote_port        ssh_transport = transport    ForwardServer(('127.0.0.1', local_port), SubHander).serve_forever()__all__ = ['forward_tunnel']
Something went wrong with that request. Please try again.