mirror of https://github.com/jumpserver/jumpserver
finish ssh server use more class
parent
4b7419559c
commit
e627b14e55
|
@ -186,15 +186,13 @@ class Navigation:
|
|||
|
||||
|
||||
class JumpServer:
|
||||
backend_server_pools = []
|
||||
backend_channel_pools = []
|
||||
client_channel_pools = []
|
||||
|
||||
def __init__(self):
|
||||
self.listen_host = '0.0.0.0'
|
||||
self.listen_port = 2222
|
||||
self.username = None
|
||||
self.backend_host = None
|
||||
self.backend_port = None
|
||||
self.backend_username = None
|
||||
self.backend_channel = None
|
||||
self.client_channel = None
|
||||
self.sock = None
|
||||
|
||||
def display_navigation(self, username, client_channel):
|
||||
|
@ -220,7 +218,8 @@ class JumpServer:
|
|||
except paramiko.SSHException:
|
||||
logger.warning('SSH negotiation failed.')
|
||||
|
||||
self.client_channel = client_channel = transport.accept(20)
|
||||
client_channel = transport.accept(20)
|
||||
self.__class__.client_channel_pools.append(client_channel)
|
||||
if client_channel is None:
|
||||
logger.warning('No channel get.')
|
||||
raise SSHServerException('No channel get.')
|
||||
|
@ -232,7 +231,9 @@ class JumpServer:
|
|||
|
||||
def get_backend_channel(self, host, port, username):
|
||||
backend_server = BackendServer(host, port, username)
|
||||
self.backend_channel = backend_channel = backend_server.connect()
|
||||
backend_channel = backend_server.connect()
|
||||
self.__class__.backend_server_pools.append(backend_server)
|
||||
self.__class__.backend_channel_pools.append(backend_channel)
|
||||
if not backend_channel:
|
||||
logger.warning('Connect %(username)s@%(host)s:%(port)s failed' % {
|
||||
'username': username,
|
||||
|
@ -249,26 +250,23 @@ class JumpServer:
|
|||
})
|
||||
try:
|
||||
client_channel = self.get_client_channel(client, addr)
|
||||
host, port, username = self.display_navigation(self.username, client_channel)
|
||||
host, port, username = self.display_navigation('root', client_channel)
|
||||
backend_channel = self.get_backend_channel(host, port, username)
|
||||
|
||||
print(client_channel.get_id(), backend_channel.get_id())
|
||||
|
||||
while True:
|
||||
r, w, x = select.select([client_channel, backend_channel], [], [])
|
||||
|
||||
if client_channel in r:
|
||||
data_client = client_channel.recv(1024)
|
||||
logger.info(data_client)
|
||||
if len(data_client) == 0:
|
||||
client_data = client_channel.recv(1024)
|
||||
if len(client_data) == 0:
|
||||
break
|
||||
backend_channel.send(data_client)
|
||||
backend_channel.send(client_data)
|
||||
|
||||
if backend_channel in r:
|
||||
data_server = backend_channel.recv(1024)
|
||||
if len(data_server) == 0:
|
||||
backend_data = backend_channel.recv(1024)
|
||||
if len(backend_data) == 0:
|
||||
break
|
||||
client_channel.send(data_server)
|
||||
client_channel.send(backend_data)
|
||||
|
||||
# if len(recv_data) > 20:
|
||||
# server_data.append('...')
|
||||
|
@ -301,7 +299,7 @@ class JumpServer:
|
|||
while True:
|
||||
try:
|
||||
client, addr = self.sock.accept()
|
||||
t = process.Process(target=self.handle_ssh_request, args=(client, addr))
|
||||
t = threading.Thread(target=self.handle_ssh_request, args=(client, addr))
|
||||
t.daemon = True
|
||||
t.start()
|
||||
except Exception as e:
|
||||
|
|
Loading…
Reference in New Issue