bugfix
This commit is contained in:
parent
8140f95ce2
commit
14c9bb02fe
@ -9,6 +9,55 @@ from appPublic.myTE import tmpTml
|
||||
from appPublic.log import debug, exception
|
||||
import asyncio, asyncssh, sys
|
||||
|
||||
class SSHServer:
|
||||
def __init__(self, server, jumpservers=[]):
|
||||
self.server = server
|
||||
self.jumpservers = jumpservers
|
||||
|
||||
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
|
||||
|
||||
@asynccontextmanager
|
||||
async def get_connector(self):
|
||||
refconn = None
|
||||
connector = []
|
||||
for jj in self.jumpservers:
|
||||
refconn = await self._connect_server(jj, refconn)
|
||||
connector.append(refconn)
|
||||
conn = await self._connect_server(self.server, refconn)
|
||||
try:
|
||||
yield conn
|
||||
except Exception as e:
|
||||
exception(f'{e=}, {format_exc()}')
|
||||
conn.close()
|
||||
connector.reverse()
|
||||
for c in connector:
|
||||
c.close()
|
||||
|
||||
class SSHNode:
|
||||
def __init__(self, host,
|
||||
username='root',
|
||||
|
Loading…
Reference in New Issue
Block a user