This commit is contained in:
yumoqing 2025-04-14 13:09:57 +08:00
parent dbfe00df59
commit afe9005137
2 changed files with 65 additions and 36 deletions

View File

@ -12,11 +12,15 @@ class SSHNode:
username='root',
port=22,
password=None,
client_keys=[],
passphrase=None,
jumpers=[]):
self.server2 = {
"host":host,
"username":username,
"password":password,
"client_keys":client_keys,
"passphrase":passphrase,
"port":port
}
print(self.server2)
@ -40,47 +44,72 @@ class SSHNode:
def set_jumpers(self, jumpers):
self.jumpers = jumpers
async def connect(self):
refconn = None
for j in self.jumpers:
host = j['host']
username = j.get('username', 'root')
port = j.get('port',22)
password= j.get('password', None)
if refconn:
refconn = await refconn.connect_ssh(host,
username=username,
known_hosts=None,
keepalive_interval=60,
password=password,
port=port)
else:
refconn = await asyncssh.connect(host,
username=username,
known_hosts=None,
keepalive_interval=60,
password=password,
port=port)
self.jumper_conns.append(refconn)
host = self.server2['host']
username = self.server2.get('username', 'root')
port = self.server2.get('port',22)
password = self.server2.get('password', None)
async def _connect(self, **kw):
refconn = kw['refconn']
host = kw['host']
username = kw.get('username', 'root')
port = kw.get('port',22)
password= kw.get('password', None)
client_keys = kw.get('client_keys', [])
passphrase = kw.get('passphrase', None)
conn = None
if refconn:
self.conn = await refconn.connect_ssh(host,
if password:
conn = await refconn.connect_ssh(host,
username=username,
port=port,
password=password,
known_hosts=None,
keepalive_interval=60,
known_hosts=None)
else:
self.conn = await asyncssh.connect(host,
username=username,
password=password,
port=port)
elif client_keys != []:
conn = await refconn.connect_ssh(host,
username=username,
known_hosts=None,
keepalive_interval=60,
client_keys=client_keys,
passphrase=passphrase,
port=port)
else:
conn = await refconn.connect_ssh(host,
username=username,
known_hosts=None,
keepalive_interval=60,
port=port)
else:
if password:
conn = await asyncssh.connect(host,
username=username,
known_hosts=None,
keepalive_interval=60,
password=password,
port=port)
elif client_keys:
conn = await asyncssh.connect(host,
username=username,
known_hosts=None,
keepalive_interval=60,
client_keys=client_keys,
passphrase=passphrase,
port=port)
else:
conn = await asyncssh.connect(host,
username=username,
known_hosts=None,
keepalive_interval=60,
port=port)
return conn
async def connect(self):
refconn = None
for jj in self.jumpers:
j = jj.copy()
j['refconn'] = refconn
refconn = await self._connect(**j)
j = self.server2.copy()
j['refconn'] = refconn
self.conn = await self._connect(**j)
def close(self):
self.conn.close()
@ -113,7 +142,6 @@ class SSHNode:
show_input=None,
show_stdout=None):
proc = await self._process(cmd, term_type='xterm',
term_size=(80,24),
encoding='utf-8'
)

View File

@ -17,5 +17,6 @@ requests
jinja2
pyzmq
cryptography
asyncssh==2.13.2
bcrypt
asyncssh
eventpy