remote[ssh]: Add the parameter allow_agent (#4623)

This parameter is passed to paramiko.
See http://docs.paramiko.org/en/stable/api/client.html?highlight=allow_agent#paramiko.client.SSHClient.connect for more details.

Fixes #4186
This commit is contained in:
Guillaume COTER
2020-09-27 01:09:00 +03:00
committed by GitHub
parent a664059eff
commit a5ab01390f
3 changed files with 28 additions and 0 deletions
+1
View File
@@ -190,6 +190,7 @@ SCHEMA = {
"keyfile": str,
"timeout": Coerce(int),
"gss_auth": Bool,
"allow_agent": Bool,
**REMOTE_COMMON,
},
"hdfs": {"user": str, **REMOTE_COMMON},
+2
View File
@@ -91,6 +91,7 @@ class SSHTree(BaseTree):
self.sock = paramiko.ProxyCommand(proxy_command)
else:
self.sock = None
self.allow_agent = config.get("allow_agent", True)
@staticmethod
def ssh_config_filename():
@@ -143,6 +144,7 @@ class SSHTree(BaseTree):
password=self.password,
gss_auth=self.gss_auth,
sock=self.sock,
allow_agent=self.allow_agent,
)
@contextmanager
+25
View File
@@ -183,6 +183,31 @@ def test_ssh_gss_auth(mock_file, mock_exists, dvc, config, expected_gss_auth):
assert tree.gss_auth == expected_gss_auth
@pytest.mark.parametrize(
"config,expected_allow_agent",
[
({"url": "ssh://example.com"}, True),
({"url": "ssh://not_in_ssh_config.com"}, True),
({"url": "ssh://example.com", "allow_agent": True}, True),
({"url": "ssh://example.com", "allow_agent": False}, False),
],
)
@patch("os.path.exists", return_value=True)
@patch(
f"{builtin_module_name}.open",
new_callable=mock_open,
read_data=mock_ssh_config,
)
def test_ssh_allow_agent(
mock_file, mock_exists, dvc, config, expected_allow_agent
):
tree = SSHTree(dvc, config)
mock_exists.assert_called_with(SSHTree.ssh_config_filename())
mock_file.assert_called_with(SSHTree.ssh_config_filename())
assert tree.allow_agent == expected_allow_agent
def test_hardlink_optimization(dvc, tmp_dir, ssh):
tree = SSHTree(dvc, ssh.config)