Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to agree on a pubkey algorithm for signing a 'ssh-rsa' key #2369

Open
VikNim opened this issue Mar 12, 2024 · 0 comments
Open

Unable to agree on a pubkey algorithm for signing a 'ssh-rsa' key #2369

VikNim opened this issue Mar 12, 2024 · 0 comments
Labels

Comments

@VikNim
Copy link

VikNim commented Mar 12, 2024

Are you using paramiko as a client or server?

Client

What feature(s) aren't working right?

SFTP

What version(s) of paramiko are you using?

2.12.0

What version(s) of Python are you using?

3.6

What operating system and version are you using?

Red Hat Hat 8.5.0-16

If you're connecting as a client, which SSH server are you connecting to?

OpenSSH

If you're using paramiko as part of another tool, which tool/version?

No response

What are you trying to do with paramiko?

Hello,
I am trying to connect to SFTP server to pull some datafiles using simple hostname, username and password to connect. I can connect through simple SFTP command but not with Paramiko in Python. But receive 'Unable to agree on pubkey algorithm'

Following is the traceback:

2024-03-11 19:59:24 Connected (version 2.0, client OpenSSH_7.4) 
2024-03-11 19:59:24 Exception (client): Unable to agree on a pubkey algorithm for signing a 'ssh-rsa' key! 
2024-03-11 19:59:24 Traceback (most recent call last): 
2024-03-11 19:59:24   File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/transport.py", line 2164, in run 
2024-03-11 19:59:24     handler(self.auth_handler, m) 
2024-03-11 19:59:24   File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/auth_handler.py", line 386, in _parse_service_accept 
2024-03-11 19:59:24     algorithm = self._finalize_pubkey_algorithm(key_type)
2024-03-11 19:59:24   File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/auth_handler.py", line 352, in _finalize_pubkey_algorithm
2024-03-11 19:59:24     raise AuthenticationException(err.format(key_type))
2024-03-11 19:59:24 paramiko.ssh_exception.AuthenticationException: Unable to agree on a pubkey algorithm for signing a 'ssh-rsa' key!
2024-03-11 19:59:25 ERROR - Traceback (most recent call last):
 File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/client.py", line 461, in connect
    passphrase,
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/client.py", line 781, in _auth
    raise saved_exception
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/client.py", line 757, in _auth
    self._transport.auth_publickey(username, key)
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/transport.py", line 1635, in auth_publickey
    return self.auth_handler.wait_for_response(my_event)
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/auth_handler.py", line 245, in wait_for_response
    raise e
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/transport.py", line 2164, in run
    handler(self.auth_handler, m)
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/auth_handler.py", line 386, in _parse_service_accept
    algorithm = self._finalize_pubkey_algorithm(key_type)
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/auth_handler.py", line 352, in _finalize_pubkey_algorithm
    raise AuthenticationException(err.format(key_type))
paramiko.ssh_exception.AuthenticationException: Unable to agree on a pubkey algorithm for signing a 'ssh-rsa' key!

I tried putting
disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']}) and
look_for_key=False
while connecting to SFTP server. But didn't help.

My current version is paramiko==2.12.0, I also tried downgrading the paramiko to 2.8.1 but that again gives me "Authentication Failed" error, as following:

2024-03-11 20:26:16 ERROR - Traceback (most recent call last):
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/client.py", line 446, in connect
    passphrase,
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/client.py", line 766, in _auth
    raise saved_exception
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/client.py", line 742, in _auth
    self._transport.auth_publickey(username, key)
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/transport.py", line 1580, in auth_publickey
    return self.auth_handler.wait_for_response(my_event)
  File "/opt/storeftp01_scripts/scriptenv/lib64/python3.6/site-packages/paramiko/auth_handler.py", line 250, in wait_for_response
    raise e
paramiko.ssh_exception.AuthenticationException: Authentication failed.

I am executing the code on Python 3.6.8 (default, Jan 11 2023, 08:43:50) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-16)] on linux.

Please advise.

How are you trying to do it, and what's happening instead?

I have inherited from Paramiko and created own class for my projects:

class SFTP:
    def _init_(self, hostname, user, password=None, pkey_path=None, timeout=30, banner_timeout=30, dsa_key=False):
        self.hostname = hostname
        self.user = user
        self.password = password
        self.pkey_path = pkey_path
        self.timeout = timeout
        self.banner_timeout = banner_timeout
        self.dsa_key = dsa_key
 
    def _enter_(self):
        '''
        To allow this to be used as a context manager.
        Creates a sftp object on entering the 'with' block.
        '''
        pkey = None
        if self.pkey_path:
            if self.dsa_key:
                pkey = paramiko.DSSKey.from_private_key_file(self.pkey_path)
            else:
                pkey = paramiko.RSAKey.from_private_key_file(self.pkey_path)
 
        self.ssh_client = paramiko.SSHClient()
        self.ssh_client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
        self.ssh_client.connect(self.hostname,
                       username=self.user,
                       password=self.password,
                       pkey=pkey,
                       banner_timeout=self.banner_timeout,
                       timeout=self.timeout,
                       disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']}) #https://stackoverflow.com/questions/4135261/paramiko-authenticationexception-issue
        try:
            self.sftp = self.ssh_client.open_sftp()
        except Exception as e:
            raise "Could not connect: " + str(e)
        return self
 
    def _exit_(self, exc_type, exc_val, exc_tb):
        '''
        Closes all the connection when exiting the 'with' block.
        '''
        self.sftp.close()
        self.ssh_client.close()

And it works perfectly well for all the hosts except for one server it gives me Authentication Issues.

Anything else?

I tried bunch of solutions from Stack and from previous issues, also tried downgrading and upgrading the paramiko version but nothing helped yet.

@VikNim VikNim added the Support label Mar 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant