fix(ssh): verify the host key netOrk expects, report the one seen (NetOrk/netork#1167)
CI / test (3.10) (push) Successful in 54s
CI / test (3.11) (push) Successful in 40s
CI / test (3.12) (push) Successful in 51s
CI / test (3.10) (pull_request) Successful in 42s
CI / test (3.11) (pull_request) Successful in 35s
CI / test (3.12) (pull_request) Successful in 49s
CI / test (3.10) (push) Successful in 54s
CI / test (3.11) (push) Successful in 40s
CI / test (3.12) (push) Successful in 51s
CI / test (3.10) (pull_request) Successful in 42s
CI / test (3.11) (pull_request) Successful in 35s
CI / test (3.12) (pull_request) Successful in 49s
The driver accepted any SSH host key. It now verifies through napalm-device-types' HostKeyCheck (>= 4.19.0): with a known key in optional_args["ssh_host_keys"] any other key is refused before login, and every key seen is reported to optional_args["ssh_host_key_observer"]. Without either argument it connects as before (first use).
This commit is contained in:
1 parent
d134ccbb89
commit
6bb3035857
6 files changed
+179
-56
No files matched your search
@@ -616,8 +616,9 @@ def _mock_ssh_exec(exit_status: int, stdout_text: str = "", stderr_text: str = "
|
||||
|
||||
def test_run_node_command_success_returns_stdout():
|
||||
mixin = ProxmoxVMProvisionMixin()
|
||||
mixin._ssh_client = MagicMock()
|
||||
mixin._ssh_client.exec_command.return_value = _mock_ssh_exec(0, stdout_text="hello\n")
|
||||
ssh = MagicMock()
|
||||
ssh.exec_command.return_value = _mock_ssh_exec(0, stdout_text="hello\n")
|
||||
mixin._node_ssh = MagicMock(return_value=ssh) # the driver's verified session
|
||||
|
||||
result = mixin._run_node_command("echo hello", timeout=10)
|
||||
|
||||
@@ -626,10 +627,9 @@ def test_run_node_command_success_returns_stdout():
|
||||
|
||||
def test_run_node_command_nonzero_exit_raises():
|
||||
mixin = ProxmoxVMProvisionMixin()
|
||||
mixin._ssh_client = MagicMock()
|
||||
mixin._ssh_client.exec_command.return_value = _mock_ssh_exec(
|
||||
1, stderr_text="No such file or directory"
|
||||
)
|
||||
ssh = MagicMock()
|
||||
ssh.exec_command.return_value = _mock_ssh_exec(1, stderr_text="No such file or directory")
|
||||
mixin._node_ssh = MagicMock(return_value=ssh)
|
||||
|
||||
with pytest.raises(RuntimeError, match="No such file or directory"):
|
||||
mixin._run_node_command("cat /nonexistent", timeout=10)
|
||||
|
||||
Reference in new issue
Block a user