Q: paramiko/SSH/ how to get a remote host_key

DHR dima.hristov at gmail.com
Mon Jan 21 08:43:53 EST 2008


Thank you! Now it works and the code looks like this:

import paramiko
import base64
from paramiko import AutoAddPolicy, SSHClient

client = paramiko.SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy())
client.connect('hostIP', username='uname', password='pass')
stdin, stdout, stderr = client.exec_command('ls')
for line in stdout:
    print '... ' + line.strip('\n')

client.close()

On Jan 21, 3:10 pm, "Guilherme Polo" <ggp... at gmail.com> wrote:
> 2008/1/21, DHR <dima.hris... at gmail.com>:
>
>
>
> > I am connecting from a WindowsXP SP2 machine. When using Putty as an
> > SSH client, if you connect for the first time then you get somethign
> > like this:
>
> > ''' The server's host key is not cached in the registry. You
> > have no guarantee that the server is the computer you
> > think it is.
> > The server's rsa2 key fingerprint is:
> > ssh-rsa 1024 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a
> > If you trust this host, hit Yes to add the key to
> > PuTTY's cache and carry on connecting.
> > If you want to carry on connecting just once, without
> > adding the key to the cache, hit No.
> > If you do not trust this host, hit Cancel to abandon the
> > connection. '''
>
> > If I get it correctly, Putty is using such a command to recieve the
> > host_key the first time it connects to a remote SSH server. Then it
> > stores it into the registry. The question is how can I do it from
> > Python?
>
> When you call method connect of SSHClient it checks if server's
> hostname is in system_hot_keys or any local host keys, if it is not,
> the missing host key policy is used. The default policy is to reject
> the key and raise an SSHException, but you can change that default
> policy to AutoAddPolicy
>
>
>
>
>
> > Guilherme Polo wrote:
> > > 2008/1/21, DHR <dima.hris... at gmail.com>:
> > > > I'm trying to run the simpliest example form paramiko readme(Homepage:
> > > >http://www.lag.net/paramiko/), and
> > > > cannot find out how to get the remote SSH server host_key.
>
> > > > This is the code. It is supposed to connect to a remote SSH host and
> > > > execute an 'ls' command:
>
> > > > import paramiko, base64
>
> > > > key = paramiko.RSAKey(data=base64.decodestring('AAA...'))
> > > > client = paramiko.SSHClient()
> > > > client.get_host_keys().add('ssh.example.com', 'ssh-rsa', key)
> > > > client.connect('227.112.168.273', username='uname', password='pass')
> > > > stdin, stdout, stderr = client.exec_command('ls')
> > > > for line in stdout:
> > > >     print '... ' + line.strip('\n')
>
> > > > client.close()
>
> > > > Now, if I understand it correctly I need to get somehow the host_key
> > > > from the server and
> > > > write it insted of the 'AAA...' thing. Is there a command to get the
> > > > host_key from a remote SSH
> > > > server?
> > > > --
> > > >http://mail.python.org/mailman/listinfo/python-list
>
> > > You need a key to connect to that server, so you should want this:
>
> > > keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
>
> > > Then keys[hostname] should contain a RSAKey object that you are looking for
>
> > > --
> > > -- Guilherme H. Polo Goncalves
> > --
> >http://mail.python.org/mailman/listinfo/python-list
>
> --
> -- Guilherme H. Polo Goncalves




More information about the Python-list mailing list