From 24c27e0c7c3d4004e4555fae29d1870992250a16 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 13 Apr 2026 01:44:02 -0700 Subject: [PATCH 1/6] fix for which_sshd --- src/splitcopy/shared.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/splitcopy/shared.py b/src/splitcopy/shared.py index 420f5f1..005931c 100644 --- a/src/splitcopy/shared.py +++ b/src/splitcopy/shared.py @@ -274,14 +274,14 @@ def which_sshd(self): logger.info("entering which_sshd()") result, stdout = self.ssh_cmd("sshd -v", exitcode=False, combine=True) if self.use_shell: - if not re.search(r"OpenSSH_", stdout): + if not re.search(r"OpenSSH_|JSSH_", stdout): self.close(err_str="failed to determine remote openssh version") output = stdout.split("\n")[2] else: - if not re.search(r"OpenSSH_", stdout): + if not re.search(r"OpenSSH_|JSSH_", stdout): self.close(err_str="failed to determine remote openssh version") output = stdout.split("\n")[1] - version = re.sub(r"OpenSSH_", "", output) + version = re.sub(r"OpenSSH_|JSSH_", "", output) sshd_version = float(version[0:3]) return sshd_version From 4d20cc850eb2be12e6a61257b9e1a53f8259fa36 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 13 Apr 2026 01:48:51 -0700 Subject: [PATCH 2/6] fix for which_sshd --- .github/workflows/python-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 823db3f..f60efef 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -40,7 +40,7 @@ jobs: pytest --cov src coverage html - name: Archive code coverage html report - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: code-coverage-report path: htmlcov/ From 7a2ab1f91935e28044f9ebce38dc377860043254 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 13 Apr 2026 22:25:16 -0700 Subject: [PATCH 3/6] fix for which_sshd --- src/splitcopy/tests/test_paramikoshell.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/splitcopy/tests/test_paramikoshell.py b/src/splitcopy/tests/test_paramikoshell.py index 24ac363..b746b6a 100644 --- a/src/splitcopy/tests/test_paramikoshell.py +++ b/src/splitcopy/tests/test_paramikoshell.py @@ -157,6 +157,8 @@ def from_private_key_file(filename): with raises(PasswordRequiredException): paramikoshell.get_pkey_from_file("EC", "/homes/foo/.ssh/bar") + dss_key_available = hasattr(paramiko, "DSSKey") + @pytest.mark.skipif(not dss_key_available, reason="paramiko.DSSKey not available (removed in paramiko 3.x)") def test_get_pkey_from_file_dsa(self, monkeypatch: MonkeyPatch): def from_private_key_file(filename): return "dsa key" From b8f019ca24ffa63073be6da9d257fe9dcb07d683 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 13 Apr 2026 22:27:33 -0700 Subject: [PATCH 4/6] fix for which_sshd --- src/splitcopy/tests/test_paramikoshell.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/splitcopy/tests/test_paramikoshell.py b/src/splitcopy/tests/test_paramikoshell.py index b746b6a..49ecf3f 100644 --- a/src/splitcopy/tests/test_paramikoshell.py +++ b/src/splitcopy/tests/test_paramikoshell.py @@ -157,6 +157,7 @@ def from_private_key_file(filename): with raises(PasswordRequiredException): paramikoshell.get_pkey_from_file("EC", "/homes/foo/.ssh/bar") + import paramiko dss_key_available = hasattr(paramiko, "DSSKey") @pytest.mark.skipif(not dss_key_available, reason="paramiko.DSSKey not available (removed in paramiko 3.x)") def test_get_pkey_from_file_dsa(self, monkeypatch: MonkeyPatch): From b682388e658dac03ff0bc044bca53d1a3ddee3e0 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 13 Apr 2026 22:29:01 -0700 Subject: [PATCH 5/6] fix for which_sshd --- src/splitcopy/tests/test_paramikoshell.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/splitcopy/tests/test_paramikoshell.py b/src/splitcopy/tests/test_paramikoshell.py index 49ecf3f..492f009 100644 --- a/src/splitcopy/tests/test_paramikoshell.py +++ b/src/splitcopy/tests/test_paramikoshell.py @@ -158,6 +158,7 @@ def from_private_key_file(filename): paramikoshell.get_pkey_from_file("EC", "/homes/foo/.ssh/bar") import paramiko + import pytest dss_key_available = hasattr(paramiko, "DSSKey") @pytest.mark.skipif(not dss_key_available, reason="paramiko.DSSKey not available (removed in paramiko 3.x)") def test_get_pkey_from_file_dsa(self, monkeypatch: MonkeyPatch): From e0e2826d3d6b88542d64e39d3224cddfff227463 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 13 Apr 2026 22:32:42 -0700 Subject: [PATCH 6/6] fix for which_sshd --- .github/workflows/python-package.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index f60efef..3e1696b 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -44,3 +44,4 @@ jobs: with: name: code-coverage-report path: htmlcov/ + overwrite: true