I’m working on a simple tool that transfers files to a hard-coded location with the password also hard-coded. I’m a python novice, but thanks to ftplib, it was easy:
import ftplib info= ('someuser', 'password') #hard-coded def putfile(file, site, dir, user=(), verbose=True): ''' upload a file by ftp to a site/directory login hard-coded, binary transfer ''' if verbose: print 'Uploading', file local = open(file, 'rb') remote = ftplib.FTP(site) remote.login(*user) remote.cwd(dir) remote.storbinary('STOR ' + file, local, 1024) remote.quit() local.close() if verbose: print 'Upload done.' if __name__ == '__main__': site = 'somewhere.com' #hard-coded dir = './uploads/' #hard-coded import sys, getpass putfile(sys.argv[1], site, dir, user=info)
The problem is that I can’t find any library that supports sFTP. What’s the normal way to do something like this securely?
Edit: Thanks to the answers here, I’ve gotten it working with Paramiko and this was the syntax.
import paramiko host = 'THEHOST.com' #hard-coded port = 22 transport = paramiko.Transport((host, port)) password = 'THEPASSWORD' #hard-coded username = 'THEUSERNAME' #hard-coded transport.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(transport) import sys path = './THETARGETDIRECTORY/' + sys.argv[1] #hard-coded localpath = sys.argv[1] sftp.put(localpath, path) sftp.close() transport.close() print 'Upload done.'
Thanks again!
Paramiko supports SFTP. I’ve used it, and I’ve used Twisted. Both have their place, but you might find it easier to start with Paramiko.