首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的SFTP?(独立于平台)

Python中的SFTP?(独立于平台)
EN

Stack Overflow用户
提问于 2009-01-11 04:48:19
回答 11查看 244.1K关注 0票数 212

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

再次感谢!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-01-11 05:04:23

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

票数 122
EN

Stack Overflow用户

发布于 2014-05-28 07:05:36

您应该查看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.'
票数 92
EN

Stack Overflow用户

发布于 2009-12-08 21:29:53

如果你想简单易懂,你可能还想看看Fabric。它是一个自动化部署工具,类似于Ruby的Capistrano,但更简单,当然也适用于Python。它是建立在帕拉米科之上的。

你可能不想做“自动化部署”,但是Fabric仍然非常适合你的用例。为了向你展示Fabric有多简单:你的脚本的fab文件和命令看起来像这样(没有经过测试,但99%确定它会工作):

fab_putfile.py:

from fabric.api import *

env.hosts = ['THEHOST.com']
env.user = 'THEUSER'
env.password = 'THEPASSWORD'

def put_file(file):
    put(file, './THETARGETDIRECTORY/') # it's copied into the target directory

然后使用fab命令运行该文件:

fab -f fab_putfile.py put_file:file=./path/to/my/file

你就完成了!:)

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/432385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档