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

Guilherme Polo ggpolo at gmail.com
Mon Jan 21 09:08:11 EST 2008


2008/1/21, DHR <dima.hristov at gmail.com>:
> 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()

Very nice =)

Just an advice, you dont need to import base64. Method decode of
strings allows you to specify encoding as 'base64' to perform needed
operations.

>
> 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
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>


-- 
-- Guilherme H. Polo Goncalves



More information about the Python-list mailing list