mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-11 07:18:28 +01:00
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:
@@ -190,6 +190,7 @@ SCHEMA = {
|
||||
"keyfile": str,
|
||||
"timeout": Coerce(int),
|
||||
"gss_auth": Bool,
|
||||
"allow_agent": Bool,
|
||||
**REMOTE_COMMON,
|
||||
},
|
||||
"hdfs": {"user": str, **REMOTE_COMMON},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user