Python 中的 SFTP? (平台无关)

新手上路,请多包涵

我正在开发一个简单的工具,可以将文件传输到硬编码的位置,密码也是硬编码的。我是 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.'

再次感谢!

原文由 Mark Wilbur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 250
2 个回答

Paramiko 支持 SFTP。我用过它,我用过 Twisted。两者都有自己的位置,但您可能会发现从 Paramiko 开始更容易。

原文由 Brian Clapper 发布,翻译遵循 CC BY-SA 4.0 许可协议

你应该查看 pysftp https://pypi.python.org/pypi/pysftp 它依赖于 paramiko,但将最常见的用例包装到几行代码中。

 import pysftp
import sys

path = './THETARGETDIRECTORY/' + sys.argv[1]    #hard-coded
localpath = sys.argv[1]

host = "THEHOST.com"                    #hard-coded
password = "THEPASSWORD"                #hard-coded
username = "THEUSERNAME"                #hard-coded

with pysftp.Connection(host, username=username, password=password) as sftp:
    sftp.put(localpath, path)

print 'Upload done.'

原文由 Dundee MT 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题