bugfix
This commit is contained in:
parent
4cb71227a1
commit
8140f95ce2
@ -6,6 +6,7 @@ from contextlib import asynccontextmanager
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from appPublic.myTE import tmpTml
|
from appPublic.myTE import tmpTml
|
||||||
|
from appPublic.log import debug, exception
|
||||||
import asyncio, asyncssh, sys
|
import asyncio, asyncssh, sys
|
||||||
|
|
||||||
class SSHNode:
|
class SSHNode:
|
||||||
@ -45,6 +46,33 @@ class SSHNode:
|
|||||||
def set_jumpers(self, jumpers):
|
def set_jumpers(self, jumpers):
|
||||||
self.jumpers = jumpers
|
self.jumpers = jumpers
|
||||||
|
|
||||||
|
async def _connect_server(self, server, refconn=None):
|
||||||
|
f = asyncssh.connect
|
||||||
|
if refconn:
|
||||||
|
f = refconn.connect_ssh
|
||||||
|
host = server['host']
|
||||||
|
username = server.get('username', 'root')
|
||||||
|
port = server.get('port',22)
|
||||||
|
password= server.get('password', None)
|
||||||
|
client_keys = server.get('client_keys', [])
|
||||||
|
passphrase = server.get('passphrase', None)
|
||||||
|
if client_keys:
|
||||||
|
conn = await f(host,
|
||||||
|
username=username,
|
||||||
|
known_hosts=None,
|
||||||
|
keepalive_interval=60,
|
||||||
|
client_keys=client_keys,
|
||||||
|
passphrase=passphrase,
|
||||||
|
port=port)
|
||||||
|
else:
|
||||||
|
conn = await f(host,
|
||||||
|
username=username,
|
||||||
|
known_hosts=None,
|
||||||
|
keepalive_interval=60,
|
||||||
|
password=password,
|
||||||
|
port=port)
|
||||||
|
return conn
|
||||||
|
|
||||||
async def _connect(self, **kw):
|
async def _connect(self, **kw):
|
||||||
refconn = kw['refconn']
|
refconn = kw['refconn']
|
||||||
host = kw['host']
|
host = kw['host']
|
||||||
@ -115,21 +143,20 @@ class SSHNode:
|
|||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def get_connector(self):
|
async def get_connector(self):
|
||||||
refconn = None
|
refconn = None
|
||||||
|
connector = []
|
||||||
for jj in self.jumpers:
|
for jj in self.jumpers:
|
||||||
j = jj.copy()
|
refconn = await self._connect_server(jj, refconn)
|
||||||
j['refconn'] = refconn
|
connector.append(refconn)
|
||||||
refconn = await self._connect(**j)
|
|
||||||
|
|
||||||
j = self.server2.copy()
|
j = self.server2.copy()
|
||||||
j['refconn'] = refconn
|
conn = await self._connect_server(j, refconn)
|
||||||
conn = await self._connect(**j)
|
|
||||||
try:
|
try:
|
||||||
yield SshConnector(conn, refconn=refconn)
|
yield conn
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
exception(f'{e=}, {format_exc()}')
|
exception(f'{e=}, {format_exc()}')
|
||||||
conn.close()
|
conn.close()
|
||||||
if refconn:
|
connector.reverse()
|
||||||
refconn.close()
|
for c in connector:
|
||||||
|
c.close()
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self.conn.close()
|
self.conn.close()
|
||||||
|
Loading…
Reference in New Issue
Block a user