Я работаю над простым инструментом, который передает файлы в жестко запрограммированном месте с паролем также жестко. Я новичок в 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.'
Еще раз спасибо!
Ответы:
Paramiko поддерживает SFTP. Я использовал это, и я использовал Twisted. Оба имеют свое место, но вам может быть легче начать с Paramiko.
источник
Вы должны проверить pysftp https://pypi.python.org/pypi/pysftp, это зависит от paramiko, но в большинстве случаев используется только несколько строк кода.
источник
with
в примереpip install pysftp
Если вы хотите легко и просто, вы также можете посмотреть на ткани . Это инструмент автоматического развертывания, подобный Ruby Capistrano, но более простой и, конечно, для Python. Он построен на вершине Парамико.
Возможно, вы не захотите делать «автоматическое развертывание», но Fabric идеально подойдет для вашего случая использования. Чтобы показать вам, насколько простой Fabric: fab-файл и команда для вашего скрипта будут выглядеть так (не проверено, но на 99% уверены, что это будет работать):
fab_putfile.py:
Затем запустите файл с помощью команды fab:
И вы сделали! :)
источник
Вот пример использования pysftp и закрытого ключа.
pysftp - это простой в использовании модуль sftp, который использует paramiko и pycrypto. Он предоставляет простой интерфейс для sftp. Другие вещи, которые вы можете сделать с pysftp, которые весьма полезны:
Больше команд и про PySFTP здесь .
источник
srv.get(file_path) # Download a file from remote server
Вы можете объяснить, куда он загружает файл?Twisted может помочь вам с тем, что вы делаете, ознакомьтесь с их документацией, есть множество примеров. Также это зрелый продукт, за которым стоит большое сообщество разработчиков и пользователей.
источник
С ключом RSA тогда обратитесь сюда
Отрывок:
источник
Существует множество ответов, в которых упоминается pysftp, поэтому в случае, если вам нужна обертка менеджера контекста вокруг pysftp, вот решение, которое еще меньше кода и в конечном итоге выглядит как следующий
(Более полный) пример: http://www.prschmid.com/2016/09/simple-opensftp-context-manager-for.html
Этот контекстный менеджер имеет встроенную логику автоматического повтора, если вы не можете подключиться в первый раз (что на удивление происходит чаще, чем вы ожидаете в производственной среде ...)
Суть контекстного менеджера для
open_sftp
: https://gist.github.com/prschmid/80a19c22012e42d4d6e791c1e4eb8515источник
Парамико так медленно. Используйте подпроцесс и оболочку, вот пример:
источник
PyFilesystem с ее sshfs является одним из вариантов. Он использует Paramiko под капотом и обеспечивает более приятный независимый интерфейс.
или
источник
Вы можете использовать модуль pexpect
Вот хороший вступительный пост
Я не проверял это, но это должно работать
источник