Skip to content

Instantly share code, notes, and snippets.

@batok
Created April 10, 2012 16:11
Show Gist options
  • Star 94 You must be signed in to star a gist
  • Fork 26 You must be signed in to fork a gist
  • Save batok/2352501 to your computer and use it in GitHub Desktop.
Save batok/2352501 to your computer and use it in GitHub Desktop.
Paramiko example using private key
import paramiko
k = paramiko.RSAKey.from_private_key_file("/Users/whatever/Downloads/mykey.pem")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print "connecting"
c.connect( hostname = "www.acme.com", username = "ubuntu", pkey = k )
print "connected"
commands = [ "/home/ubuntu/firstscript.sh", "/home/ubuntu/secondscript.sh" ]
for command in commands:
print "Executing {}".format( command )
stdin , stdout, stderr = c.exec_command(command)
print stdout.read()
print( "Errors")
print stderr.read()
c.close()
@iamrahulgupta7
Copy link

Error:

File "/usr/lib/python3.6/site-packages/paramiko/pkey.py", line 289, in _read_private_key
raise SSHException("not a valid " + tag + " private key file")
paramiko.ssh_exception.SSHException: not a valid RSA private key file

it worked for me when I created key with type RSA

ssh-keygen -m pem -t rsa

moreover in python3.8 print statement will not work the way it is mentioned above. Also changed from read to readlines and created a loop

xlist = (stdout.readlines())
for i in xlist:
print(i)
print("++++++++++++++++")

Nothing else need to be changed.

@StefanoGITA
Copy link

Just a note, if you have generated your keys via puttygen and they are in ppk format, it's not going to work, go back to puttygen, load you ppk key and export it as OpenSSH (Conversion -> Export OpenSSH Key)

Hi, I've converted the file to OpenSSH (with puttygen)
but now if I use pkey = pk.RSAKey.from_private_key_file(key_filename)
On the connect I got

Authentication failed

If I use the filename
ssh.connect(hostname=ip_server, username=username, key_filename=key_filename)
I got

 raise ValueError("q must be exactly 160, 224, or 256 bits long")

ValueError: q must be exactly 160, 224, or 256 bits long

@sarthak405
Copy link

Just a note, if you have generated your keys via puttygen and they are in ppk format, it's not going to work, go back to puttygen, load you ppk key and export it as OpenSSH (Conversion -> Export OpenSSH Key)

Worked perfectly for me. Thanks a lot!

@Amanjain98
Copy link

Not working for me

Traceback (most recent call last):
File "/opt/cms/scripts/bam_sdrtrace.py", line 227, in
transfer_file1()
File "/opt/cms/scripts/bam_sdrtrace.py", line 148, in transfer_file1
k = paramiko.RSAKey.from_private_key_file("/home/esbc/.ssh/authorized_keys")
File "/usr/lib/python2.7/site-packages/paramiko/pkey.py", line 196, in from_private_key_file
key = cls(filename=filename, password=password)
File "/usr/lib/python2.7/site-packages/paramiko/rsakey.py", line 45, in init
self._from_private_key_file(filename, password)
File "/usr/lib/python2.7/site-packages/paramiko/rsakey.py", line 163, in _from_private_key_file
data = self._read_private_key_file('RSA', filename, password)
File "/usr/lib/python2.7/site-packages/paramiko/pkey.py", line 268, in _read_private_key_file
data = self._read_private_key(tag, f, password)
File "/usr/lib/python2.7/site-packages/paramiko/pkey.py", line 277, in _read_private_key
raise SSHException('not a valid ' + tag + ' private key file')
paramiko.ssh_exception.SSHException: not a valid RSA private key file

@anilmhaske1991
Copy link

socket.py", line 918, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
what's wrong

@vickyvikas7988
Copy link

Not working for me, while use the key using ssh client it works

Traceback (most recent call last):
File "/Users/xx/code/compute-ops/scripts/launch_intance_benchmark.py", line 105, in
k = paramiko.RSAKey.from_private_key_file("/Users/xx/.ssh/id_rsa.pem")
File "/Users/xx/code/compute-ops/venv3/lib/python3.7/site-packages/paramiko/pkey.py", line 206, in from_private_key_file
key = cls(filename=filename, password=password)
File "/Users/xx/code/compute-ops/venv3/lib/python3.7/site-packages/paramiko/rsakey.py", line 48, in init
self._from_private_key_file(filename, password)
File "/Users/xx/code/compute-ops/venv3/lib/python3.7/site-packages/paramiko/rsakey.py", line 169, in _from_private_key_file
data = self._read_private_key_file('RSA', filename, password)
File "/Users/xx/code/compute-ops/venv3/lib/python3.7/site-packages/paramiko/pkey.py", line 279, in _read_private_key_file
data = self._read_private_key(tag, f, password)
File "/Users/xx/code/compute-ops/venv3/lib/python3.7/site-packages/paramiko/pkey.py", line 289, in _read_private_key
raise SSHException('not a valid ' + tag + ' private key file')
paramiko.ssh_exception.SSHException: not a valid RSA private key file

@vickyvikas7988
Copy link

Converting the key
resolves the error
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

@dovanpho
Copy link

dovanpho commented May 7, 2021

thanks.
if your private key is in .ppk, you need convert to .pem.

@rdiazg14
Copy link

I resolve this problem with version paramiko-2.10.4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment