Search code examples
pythonsshsftppysftp

Connecting to SFTP server with .ppk key using Python pysftp: not a valid DSA private key file


Everyday I am uploading files to SFTP server using WinSCP. I decided to use Python to automate this process. This SFTP has host, username, port, and .ppk file

I found a code, but it didn't work. It says

SSHException: not a valid DSA private key file

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

HOST = 'HOST'
USERNAME = 'USERNAME'
PRIVATE_KEY = 'file.ppk'
PORT = 1111

srv = pysftp.Connection(host = HOST, 
                        username = USERNAME, 
                        private_key = PRIVATE_KEY, 
                        port = PORT
                        cnopts = cnopts)

data = srv.listdir()
srv.close()

for i in data:
    print(i)

What should I do? I know how to upload files etc I just would like to know how to connect the SFTP.

Here is how .ppk file looks like.

PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: rsa-key-20220408
Public-Lines: 6
AAAAB3NzaC1yc2EAAAADAQABAAABAQCKXdZXgtuaGfRayz7cz6bFkXWhVmbmGebJ
XFND5bIz73/cemi8TPiU7yLt7HiZNh189kOCRYrz51zX3JDi7s8tQp4pa2LsJ2jn
YeTTAXS2HzxL0aDWzom22A7FaHVAHTO48o9MzjdEek+0Mi2taZMy7hKQqCJUAl9U
5zQrbRvczyCRlp0N824lUfkCXvOs4ib92YzEhOgfnG7aH9rLdft5T2CyBMmT2c4P
bybKp2m8tl17ClAzQUQC6JfxTO3Kd0Zvw1AQmD8pqkr6pbp3a+pWOd/PLG+8NniJ
0ipbFhaq0ptn3iCaMbUySF1R1J3CIlrTM51fhH/knTwKV9A3zscD
Private-Lines: 14
...
Private-MAC: 16d619f3cca3b69ea882fc95b7f5b3a153aeb455af4e9cfc56a5a85bf6fce2b3

Solution

  • For your literal problem, see:
    How to ssh connect through Python Paramiko with ppk public key

    It's about Paramiko. But pysftp is just a thin wrapper around Paramiko. And you should not use pysftp anyway, it's dead. See pysftp vs. Paramiko.


    Though note, that as you have WinSCP working, you can automate your task using WinSCP scripting.

    WinSCP GUI can even generate a working script template for you.