perf: 优化针对低版本 ssh 版本的任务

This commit is contained in:
Eric
2024-04-01 17:28:18 +08:00
committed by Bryan
parent 22d70eb416
commit 2f16bdc4be
10 changed files with 36 additions and 3 deletions

View File

@@ -91,6 +91,15 @@ class JMSInventory:
}
return var
@staticmethod
def make_protocol_setting_vars(host, protocols):
# 针对 ssh 协议的特殊处理
for p in protocols:
if p.name == 'ssh':
if hasattr(p, 'setting'):
setting = getattr(p, 'setting')
host['old_ssh_version'] = setting.get('old_ssh_version', False)
def make_account_vars(self, host, asset, account, automation, protocol, platform, gateway):
from accounts.const import AutomationTypes
if not account:
@@ -186,6 +195,8 @@ class JMSInventory:
} if account else None
}
self.make_protocol_setting_vars(host, protocols)
protocols = host['jms_asset']['protocols']
host['jms_asset'].update({f"{p['name']}_port": p['port'] for p in protocols})
if host['jms_account'] and tp == 'oracle':

View File

@@ -4,9 +4,8 @@ import time
import paramiko
from sshtunnel import SSHTunnelForwarder
from packaging import version
if version.parse(paramiko.__version__) > version.parse("2.8.1"):
class OldSSHTransport(paramiko.transport.Transport):
_preferred_pubkeys = (
"ssh-ed25519",
"ecdsa-sha2-nistp256",
@@ -17,7 +16,6 @@ if version.parse(paramiko.__version__) > version.parse("2.8.1"):
"rsa-sha2-512",
"ssh-dss",
)
paramiko.transport.Transport._preferred_pubkeys = _preferred_pubkeys
def common_argument_spec():
@@ -36,6 +34,8 @@ def common_argument_spec():
become_user=dict(type='str', required=False),
become_password=dict(type='str', required=False, no_log=True),
become_private_key_path=dict(type='str', required=False, no_log=True),
old_ssh_version=dict(type='bool', default=False, required=False),
)
return options
@@ -69,6 +69,8 @@ class SSHClient:
params['username'] = self.module.params['login_user']
params['password'] = self.module.params['login_password']
params['key_filename'] = self.module.params['login_private_key_path'] or None
if self.module.params['old_ssh_version']:
params['transport_factory'] = OldSSHTransport
return params
def _get_channel(self):