0

I am using paramiko==2.11.0 and I am trying to create a RSAKey representation of a public key which I have in memory, because I will later add it as a known host key.

import paramiko

host_public_key_data = b"""
---- BEGIN SSH2 PUBLIC KEY ----
Comment: ""
AAAAB3NzaC1yc2EAAAADAQABAAACAQCHr4+70xMW2KkShW0/+VAZQQ/dMgGPcKRS
zOWhkSgvAuKPTpxkmkMh5/tXHKkFuTWdrGF4hP0acBIzkYTubpwJO3q4aqnSCD1C
xpMa8uZXgTHKAx3xUkBlZGUYrNSqjD4+yNIV/mkApzAnjGlupLxwH+pfKIY6IfbA
B2HtD3RbvUCWGKbPORRZKCuDLmztfDajM2l8eyixWn2/iwbI00usuUnvMbKsaN9t
NNjHz06dQITWWNuQICwBNiyWiWpVPezdxkXZ2MkfbdIKdFK72MAtXG4CFvk5x9Jl
7xjb53Yv5Dv94HmCXR43WQ8+WB2iBhUWt08SWr9qG3CAir4GT5D3l3esdV5mIKZ+
7T9TtATXa8HJE8EcB4nAblKXnAFSbzIL/qvCiEJkk2GfwUDWzll21o4HljZWHK0T
odwReL7aQb44XdTB26CMGnDxLhCImbRYeFrolm6Q/K8yAm6QSiZdFYXolQ7wj1fU
aTwzCea+EY1nEj/Uq77l4w7zU6YaQtiotEtVqb/4x5YRyJI/JiPDA56k+gXB+Rm6
jBS+qOL+dP/LeTQNt3d1nz4jw6E0MkXqSIk8drd/TOnIslkBJtm2YpBDaBvRLg2b
EXMDBCtTnjBA/Xnk7LnRFUcq1PjI/4kckNlhRgIbj0d9S6RzFPHjq9i0iCCX47ws
eI7DoRWLXw==
"""
host_public_key = paramiko.RSAKey(data=host_public_key_data) # public key used as host key

ssh_client = paramiko.SSHClient()
ssh_client.get_host_keys().add(HOST, 'ssh-rsa', host_public_key)
ssh_client.connect(HOST, port=PORT, pkey=my_client_private_key)

However, I am getting the following error:

SSHException: Invalid key (class: RSAKey, data type: - BEGIN SSH2 PUBLIC KEY ----
Comment: ""
AAAAB3NzaC1yc2EAAAADAQABAAACAQCHr4+70xMW2KkShW0/+VAZQQ/dMgGPcKRS
zOWhkSgvAuKPTpxkmkMh5/tXHKkFuTWdrGF4hP0acBIzkYTubpwJO3q4aqnSCD1C
xpMa8uZXgTHKAx3xUkBlZGUYrNSqjD4+yNIV/mkApzAnjGlupLxwH+pfKIY6IfbA
B2HtD3RbvUCWGKbPORRZKCuDLmztfDajM2l8eyixWn2/iwbI00usuUnvMbKsaN9t
NNjHz06dQITWWNuQICwBNiyWiWpVPezdxkXZ2MkfbdIKdFK72MAtXG4CFvk5x9Jl
7xjb53Yv5Dv94HmCXR43WQ8+WB2iBhUWt08SWr9qG3CAir4GT5D3l3esdV5mIKZ+
7T9TtATXa8HJE8EcB4nAblKXnAFSbzIL/qvCiEJkk2GfwUDWzll21o4HljZWHK0T
odwReL7aQb44XdTB26CMGnDxLhCImbRYeFrolm6Q/K8yAm6QSiZdFYXolQ7wj1fU
aTwzCea+EY1nEj/Uq77l4w7zU6YaQtiotEtVqb/4x5YRyJI/JiPDA56k+gXB+Rm6
jBS+qOL+dP/LeTQNt3d1nz4jw6E0MkXqSIk8drd/TOnIslkBJtm2YpBDaBvRLg2b
EXMDBCtTnjBA/Xnk7LnRFUcq1PjI/4kckNlhRgIbj0d9S6RzFPHjq9i0iCCX47ws
eI7DoRWLXw==
---- END SSH2 PUBLIC KEY ----

Any idea why paramiko is declaring it as an invalid key?

Luiscri
  • 913
  • 1
  • 13
  • 40
  • I think that function wants private keys. The paramiko documentation is a little thin on details but perhaps this function, [`paramiko.pkey.PublicBlob()`](https://docs.paramiko.org/en/stable/api/keys.html#paramiko.pkey.PublicBlob)), will work better. – President James K. Polk Sep 18 '22 at 21:45
  • @PresidentJamesK.Polk Do you think that it would also be fine to use the `paramiko.PKey(data='...')` instantiation? I don't know for which one I should go – Luiscri Sep 18 '22 at 22:19
  • Sorry, I thought I could create the RSAKey from the raw content of the public key file, I didn't get the point that I had to provide it in that format. Thank you very much for your comments @MartinPrikryl – Luiscri Sep 23 '22 at 11:02
  • @MartinPrikryl Sorry for pining you to so much threads, but I just posted a [question](https://stackoverflow.com/questions/73827417/set-sftp-server-host-public-key) with the traces output of a problem I am facing when following the steps in your last question. You are the person with the highest score on `sftp` questions, so I thought you may know how to face the problem – Luiscri Sep 23 '22 at 13:23

1 Answers1

-1

I believe the RSAKey class you're trying to use does not support public keys. After a bit of searching and testing seems like one can use the Public Key class for Public keys. Not sure if that would still work for your scenario

https://docs.paramiko.org/en/stable/api/keys.html#paramiko.pkey.PKey

Davis R.
  • 1
  • 4