【发布时间】:2010-09-30 17:59:31
【问题描述】:
我正在开发一个简单的工具,可以将文件传输到硬编码位置,同时密码也是硬编码的。我是 python 新手,但是感谢 ftplib,这很容易:
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)
问题是我找不到任何支持 sFTP 的库。安全地做这样的事情的正常方法是什么?
编辑:多亏了这里的答案,我已经可以使用 Paramiko 了,这就是语法。
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.'
再次感谢!
【问题讨论】:
-
谢谢!得到一个 SFTP 上传脚本在 5 分钟内工作 :)
-
只是对原始问题的一般说明,python ftplib 还支持 FTPS - ftp over TLS en.m.wikipedia.org/wiki/FTPS 。可以说 FTPS 服务器在 Unix 世界中使用较少,部分原因是 ssh/sftp 无所不在,然而,在 FTPS 更常见的 Windows 环境中,sftp 服务器的出现要少得多。
-
看起来 FTPS 支持是在 Python 3.2 中添加了一个扩展类 source: class ftplib.FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)
-
我完全遵循了这一点,但我收到了一个找不到文件的错误。我已经使用 os.path.abspath 和 os.path.isfile 进行了检查,但在运行此脚本时仍然出现错误。怎么回事?