From 211d5c443ae69a9a69213fb35b9164d86113c0da Mon Sep 17 00:00:00 2001 From: Max KvR Date: Fri, 27 Jan 2023 17:05:40 +0100 Subject: [PATCH] Passthrough SSH-Key filename && passphrase Signed-off-by: Max KvR --- docker/api/client.py | 4 +++- docker/transport/sshconn.py | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docker/api/client.py b/docker/api/client.py index 65b9d9d19..2654bad4b 100644 --- a/docker/api/client.py +++ b/docker/api/client.py @@ -106,6 +106,7 @@ def __init__(self, base_url=None, version=None, timeout=DEFAULT_TIMEOUT_SECONDS, tls=False, user_agent=DEFAULT_USER_AGENT, num_pools=None, credstore_env=None, use_ssh_client=False, + ssh_key_phrase=None, ssh_key_filename=None, max_pool_size=DEFAULT_MAX_POOL_SIZE): super().__init__() @@ -170,7 +171,8 @@ def __init__(self, base_url=None, version=None, try: self._custom_adapter = SSHHTTPAdapter( base_url, timeout, pool_connections=num_pools, - max_pool_size=max_pool_size, shell_out=use_ssh_client + max_pool_size=max_pool_size, shell_out=use_ssh_client, + ssh_key_phrase=ssh_key_phrase, ssh_key_filename=ssh_key_filename ) except NameError: raise DockerException( diff --git a/docker/transport/sshconn.py b/docker/transport/sshconn.py index 7421f33bd..81740c91c 100644 --- a/docker/transport/sshconn.py +++ b/docker/transport/sshconn.py @@ -169,7 +169,7 @@ class SSHHTTPAdapter(BaseHTTPAdapter): def __init__(self, base_url, timeout=60, pool_connections=constants.DEFAULT_NUM_POOLS, max_pool_size=constants.DEFAULT_MAX_POOL_SIZE, - shell_out=False): + shell_out=False, ssh_key_filename=None, ssh_key_phrase=None, ): self.ssh_client = None if not shell_out: self._create_paramiko_client(base_url) @@ -184,6 +184,8 @@ def __init__(self, base_url, timeout=60, self.pools = RecentlyUsedContainer( pool_connections, dispose_func=lambda p: p.close() ) + self.ssh_key_filename = ssh_key_filename + self.ssh_key_phrase = ssh_key_phrase super().__init__() def _create_paramiko_client(self, base_url): @@ -213,6 +215,10 @@ def _create_paramiko_client(self, base_url): self.ssh_params['username'] = host_config['user'] if 'identityfile' in host_config: self.ssh_params['key_filename'] = host_config['identityfile'] + if self.ssh_key_filename: + self.ssh_params['key_filename'] = self.ssh_key_filename + if self.ssh_key_phrase: + self.ssh_params['passphrase'] = self.ssh_key_phrase self.ssh_client.load_system_host_keys() self.ssh_client.set_missing_host_key_policy(paramiko.RejectPolicy())