Search code examples
pythonwindowsparamikossh-keyspublic-key

Embedding key as string in Paramiko application


I'm trying to create a single file executable in Python and using Paramiko for my SSH. I need to eliminate external files such as private key files and try to go for embedded strings.

I tried this solution but it's not working for me:
Paramiko: Creating a PKey from a public key string

How do I accomplish this? Thanks.


Solution

  • The solution you mentioned:

    key = paramiko.RSAKey(data=base64.b64decode('AAblablabla...'))
    

    works fine however it may be inconvenient to store the key in base64 format.

    The following code shows how to use the key stored in "plain-text" format (as key-files in ~/.ssh directory):

    import paramiko
    import StringIO
    
    my_key = """\
    -----BEGIN RSA PRIVATE KEY-----
    <your key here>
    -----END RSA PRIVATE KEY-----"""
    
    pkey = paramiko.RSAKey.from_private_key(StringIO.StringIO(my_key))
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname='host', username='user', pkey=pkey)
    
    ...
    
    ssh.close()
    

    In Python 3:

    import io
    # ...
    pkey = paramiko.RSAKey.from_private_key(io.StringIO(my_key))
    

    See StringIO in Python3