[paramiko] client.py in version 1.6.4

Robey Pointer robey at lag.net
Sat Dec 30 22:42:12 PST 2006


On 28 Dec 2006, at 17:27, CK Tan wrote:

> In reference to bug# 69330 ("client.py doesn't handle nonexistant key
> files https://bugs.launchpad.net/products/paramiko/+bug/69330),
> the bug fix introduced another bug:
>
>          keyfiles = []
>          rsa_key = os.path.expanduser('~/.ssh/id_rsa')
>          dsa_key = os.path.expanduser('~/.ssh/is_dsa')
>          if os.path.isfile(rsa_key):
>              keyfiles.append((RSAKey, rsa_key))
>          if os.path.isfile(dsa_key):
>              keyfiles.append((DSSKey, dss_key))
>          for pkey_class, filename in keyfiles:
>    --->      filename = os.path.expanduser(''~/.ssh/' + filename)
>              try:
>                  key = pkey_class.from_private_key_file(filename,
> password)
>                  self._log(DEBUG, 'Trying discovered key %s in %s' %
> (hexlify(key.get_fingerprint()), filename))
>                  self._transport.auth_publickey(username, key)
>                  return
>              except SSHException, e:
>                  saved_exception = e
>              except IOError, e:
>                  saved_exception = e
>
> The indicated line above may result in ~/.ssh/ being expanded more
> than once,
> resulting in the error below:
>
> % python
> Python 2.3.5 (#1, Aug 19 2006, 21:31:42)
> [GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import paramiko
>>>> paramiko.__version__
> '1.6.4 (yanma)'
>>>> s = paramiko.SSHClient()
>>>> s.load_system_host_keys()
>>>> s.connect('localhost')
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
>    File "/Users/cktan/w/cdb2/mppMgmt/bin/lib/paramiko/client.py",
> line 277, in connect
>      self._auth(username, password, pkey, key_filename)
>    File "/Users/cktan/w/cdb2/mppMgmt/bin/lib/paramiko/client.py",
> line 405, in _auth
>      raise saved_exception
> IOError: [Errno 2] No such file or directory: '/Users/cktan/.ssh//
> Users/cktan/.ssh/id_rsa'
>>>>
>
>
> Suggested fix:
>
> condition the clause by
> 	if filename.find('/.ssh/') >= 0: filename = os.path.expanduser
> ('~/.ssh/' + filename)

I believe this is fixed in the trunk, by removing the extra  
expanduser call.

robey




More information about the paramiko mailing list