7

My code:

import pysftp 
s = pysftp.Connection(host='test.rebex.net', username='demo', password='password') 
data = s.listdir() 
s.close() 
for i in data: 
    print i

I'm getting an error trying to connect to a SFTP server using pysftp.

This should be straight forward enough but I get the error below:

Traceback (most recent call last):
  File "/Users/gavinhinfey/Documents/Python Files/sftp_test.py", line 3, in <module>
    s = pysftp.Connection(host='test.rebex.net', username='demo', password='password')
  File "build/bdist.macosx-10.6-intel/egg/pysftp.py", line 55, in __init__
  File "build/bdist.macosx-10.5-intel/egg/paramiko/transport.py", line 303, in __init__
paramiko.SSHException: Unable to connect to test.rebex.net: [Errno 60] Operation timed out
Exception AttributeError: "'Connection' object has no attribute '_tranport_live'" in <bound     method Connection.__del__ of <pysftp.Connection object at 0x101a5a810>> ignored

I've tried using different versions of python (mostly 2.7), I have all dependencies installed and I tried numerous sftp connections. I'm using OS X 10.9.1.

Martin Prikryl
  • 147,050
  • 42
  • 335
  • 704
Gavin Hinfey
  • 214
  • 1
  • 2
  • 10
  • sorry the code input code is `import pysftp s = pysftp.Connection(host='test.rebex.net', username='demo', password='password') data = s.listdir() s.close() for i in data: print i` – Gavin Hinfey Jan 13 '14 at 13:48
  • are you sure your host is correct and your ports aren't blocked? your error log is telling you that your connection to host timed out, after which the `s` object is not initiated and throws normal errors for an object that failed to initiate. – mmdanziger Jan 13 '14 at 13:56
  • I can connect with File Zilla with the same details? Does this mean that my ports are not blocked? – Gavin Hinfey Jan 13 '14 at 14:42
  • Strange. Maybe try `log=True` in your `kwargs` for `Connection` and post what you get there. – mmdanziger Jan 13 '14 at 14:53
  • Sorry but when I add log=True where does it output the log? Thanks – Gavin Hinfey Jan 13 '14 at 15:51
  • When you use File Zilla, which protocol are you using? FTP, FTPS, or SFTP? – Robᵩ Jan 13 '14 at 16:19
  • I just tried using pythons builtin ftplib and it works. It appears to be FTP not SFTP that I needed. My apologies. – Gavin Hinfey Jan 13 '14 at 17:01

3 Answers3

13

updating the package didn't work for me, as it was already up-to-date (latest for python 2.7 at least)

Found a better aproach here.

1) You can manualy add the ssh key to the known_hosts file

ssh test.rebex.net

2) Or you can set a flag to ignore it

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
with pysftp.Connection('host', username='me',private_key=private_key,
                           private_key_pass=private_key_password,
                           cnopts=cnopts) as sftp
    # do stuff here
Maviles
  • 2,346
  • 1
  • 20
  • 32
6

That initial error appears to be a problem connecting with the remote server (SSHException). The second (AttributeError), is from a bug in the code that occurs when the connection fails. It is fixed in the latest version of pysftp

https://pypi.python.org/pypi/pysftp

pip install -U pysftp

is your friend.

Denis Otkidach
  • 28,521
  • 8
  • 72
  • 93
Dundee MT
  • 1,061
  • 9
  • 5
-1

@Martin.Prikryl: setting hostkeys = None is very useful in the initial stage of coding with pysftp. Debugging a program that keeps failing for a known exception hides other problems that need attention--like making an actual connection. I can deal with the 'man in the middle' problem later once I know my code is actually working correctly.

@All: The current pysftp.CnOpts() object appears to have a bug:

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

The above code does not prevent host key checking.

python getfile_v3.py --help Traceback (most recent call last): File "getfile_v3.py", line 9, in cnopts = pysftp.CnOpts() File "c:\Program Files\Python\Python38\lib\site-packages\pysftp_init_.py", line 64, in init raise HostKeysException('No Host Keys Found') pysftp.exceptions.HostKeysException: No Host Keys Found

The second line doesn't get executed because the first does the host key check by default. If I set the key with:

      cnopts = pysftp.CnOpts(hostkeys=None)

the same error results.

It appears that 'hostkeys' has been deprecated, and there is no way to disable the host key check.

Joe White