Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
while True:
localport = pick()
if localport < 0:
raise TunnelException('No available local port')
#print('Trying port %d...' % localport)
try:
self._connect(localport, host, port, through=through)
#print('SSH tunnel %d:%s:%d' % (localport, host, port))
except TunnelException as e: # breaks 2.5 compatibility
if e.args[0] == 'bind':
self.disconnect()
continue
else:
self.__disconnect()
raise TunnelException('Connection failed')
self.connected = True
return localport
else: rhost = remotehost
self._launcher(host=rhost, command=command,
options=options, background=True) #XXX: MMM
#options=options, background=False)
self._launcher.launch()
self._lport = localport
self._rport = remoteport
self._host = rhost
self._pid = self._launcher.pid() #FIXME: should be tunnel_pid [pid()+1]
line = self._launcher.response()
if line:
if line.startswith('bind'):
raise TunnelException('bind')
else:
print(line)
raise TunnelException('failure')
return
host -- remote hostname [user@host:path is also valid]
port -- remote port number
Additional Input:
through -- 'tunnel-through' hostname [default = None]
'''
from pathos.portpicker import portnumber
if port is None:
from pathos.core import randomport
port = randomport(through) if through else randomport(host)
pick = portnumber(self.MINPORT, self.MAXPORT)
while True:
localport = pick()
if localport < 0:
raise TunnelException('No available local port')
#print('Trying port %d...' % localport)
try:
self._connect(localport, host, port, through=through)
#print('SSH tunnel %d:%s:%d' % (localport, host, port))
except TunnelException as e: # breaks 2.5 compatibility
if e.args[0] == 'bind':
self.disconnect()
continue
else:
self.__disconnect()
raise TunnelException('Connection failed')
self.connected = True
return localport
options = '-q -N -L %d:%s:%d' % (localport, remotehost, remoteport)
command = ''
if through: rhost = through
else: rhost = remotehost
self._launcher(host=rhost, command=command,
options=options, background=True) #XXX: MMM
#options=options, background=False)
self._launcher.launch()
self._lport = localport
self._rport = remoteport
self._host = rhost
self._pid = self._launcher.pid() #FIXME: should be tunnel_pid [pid()+1]
line = self._launcher.response()
if line:
if line.startswith('bind'):
raise TunnelException('bind')
else:
print(line)
raise TunnelException('failure')
return