Python копирование файлов в сетевую папку
У меня на локальном компьютере есть текстовый файл, который генерируется ежедневным скриптом Python, запускаемым в cron.
Я хотел бы добавить немного кода для безопасной отправки этого файла на мой сервер через SSH.
Вам необходимо сгенерировать (на исходном компьютере) и установить (на конечном компьютере) ключ ssh заранее, чтобы scp автоматически проходил аутентификацию с вашим открытым ключом ssh (другими словами, чтобы ваш скрипт не запрашивал пароль) ,
Я использовал sshfs для монтирования удаленного каталога через ssh и shutil для копирования файлов:
Преимущество этого метода заключается в том, что вы можете выполнять потоковую передачу данных, если вы генерируете данные, а не кэшируете локально и отправляете один большой файл.
Вы можете использовать вассальную упаковку, которая предназначена именно для этого.
Все, что вам нужно, это установить вассала и сделать
Кроме того, это сохранит ваши аутентификационные данные и не нужно будет вводить их снова и снова.
Достигнута та же проблема, но вместо «взлома» или эмуляции командной строки:
Найти этот ответ здесь.
Вы можете сделать что-то вроде этого, чтобы также выполнить проверку ключа хоста.
Очень простой подход заключается в следующем:
Библиотека Python не требуется (только ОС), и это работает
fabric можно использовать для загрузки файлов в ssh:
Возможно, вы бы использовали модуль подпроцесса. Что-то вроде этого:
Где destination , вероятно, имеет вид user@remotehost:remotepath . Благодаря @Charles Duffy за указание на слабость в моем исходном ответе, в котором для указания операции scp shell=True использовался единственный строковый аргумент, который не обрабатывал бы пробелы в путях.
Убедитесь, что вы установили правильные учетные данные, чтобы вы могли выполнять автоматическую scp без пароля между компьютерами . Для этого уже существует stackoverflow.
Использование внешнего ресурса paramiko;
Есть несколько разных способов решения проблемы:
- Обернуть программы командной строки
- используйте библиотеку Python, которая предоставляет возможности SSH (например, - Paramiko или Twisted Conch)
У каждого подхода есть свои причуды. Вам нужно будет настроить ключи SSH для включения входа без пароля, если вы переносите системные команды, такие как «ssh», «scp» или «rsync». Вы можете встроить пароль в скрипт, используя Paramiko или другую библиотеку, но вы можете столкнуться с недостатком документации, особенно если вы не знакомы с основами соединения SSH (например, обмен ключами, агенты и т. Д.). Вероятно, само собой разумеется, что ключи SSH почти всегда лучше, чем пароли для такого рода вещей.
ПРИМЕЧАНИЕ: rsync трудно победить, если вы планируете передавать файлы через SSH, особенно если альтернативой является старый scp.
Я использовал Paramiko, ориентируясь на замену системных вызовов, но обнаружил, что возвращаюсь к свернутым командам из-за их простоты использования и непосредственного знакомства. Вы можете быть другим. Я дал Кончу некоторое время назад, но это не обращалось ко мне.
При выборе пути системного вызова Python предлагает массив опций, таких как os.system или модули command / subprocess. Я бы пошел с модулем подпроцесса, если использовать версию 2.4+.
Попробуйте это, если вы не хотите использовать SSL-сертификаты:
Чтобы сделать это в Python (т. Е. Не переносить scp через subprocess.Popen или аналогичный) с помощью библиотеки Paramiko, вы сделал бы что-то вроде этого:
(Возможно, вы захотите иметь дело с неизвестными хостами, ошибками, созданием любых необходимых каталогов и т. Д.).
I have a text file on my local machine that is generated by a daily Python script run in cron.
I would like to add a bit of code to have that file sent securely to my server over SSH.
14 Answers 14
To do this in Python (i.e. not wrapping scp through subprocess.Popen or similar) with the Paramiko library, you would do something like this:
(You would probably want to deal with unknown hosts, errors, creating any directories necessary, and so on).
paramiko has a nice sftp.put(self, localpath, remotepath, callback=None) function too, so you don't have to open write, and close each file.
Note: to make this work out of the box add ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) after instantiating ssh .
You need to generate (on the source machine) and install (on the destination machine) an ssh key beforehand so that the scp automatically gets authenticated with your public ssh key (in other words, so your script doesn't ask for a password).
adding ssh key is not a good solution when it is not needed. For example, if you need a one time communication, you don't set up ssh key due to security reasons.
You'd probably use the subprocess module. Something like this:
Where destination is probably of the form user@remotehost:remotepath . Thanks to @Charles Duffy for pointing out the weakness in my original answer, which used a single string argument to specify the scp operation shell=True - that wouldn't handle whitespace in paths.
Ensure that you've set up proper credentials so that you can perform an unattended, passwordless scp between the machines. There is a stackoverflow question for this already.
Using subprocess.Popen is the Right Thing. Passing it a string rather than an array (and using shell=True) is the Wrong Thing, as it means filenames with spaces don't work correctly.
@J.F.Sebastian: yep, I checked it out in December. My upvotes prove that, at least. :) Thanks for the follow-up though.
There are a couple of different ways to approach the problem:
- Wrap command-line programs
- use a Python library that provides SSH capabilities (eg - Paramiko or Twisted Conch)
Each approach has its own quirks. You will need to setup SSH keys to enable password-less logins if you are wrapping system commands like "ssh", "scp" or "rsync." You can embed a password in a script using Paramiko or some other library, but you might find the lack of documentation frustrating, especially if you are not familiar with the basics of the SSH connection (eg - key exchanges, agents, etc). It probably goes without saying that SSH keys are almost always a better idea than passwords for this sort of stuff.
NOTE: its hard to beat rsync if you plan on transferring files via SSH, especially if the alternative is plain old scp.
I've used Paramiko with an eye towards replacing system calls but found myself drawn back to the wrapped commands due to their ease of use and immediate familiarity. You might be different. I gave Conch the once-over some time ago but it didn't appeal to me.
If opting for the system-call path, Python offers an array of options such as os.system or the commands/subprocess modules. I'd go with the subprocess module if using version 2.4+.
как написать код для Питона?
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Как копировать файл через локалку&
да у нас тоже. но я просто повешаю свою квалификацию
знание без жертвы не будет ))
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Как копировать файл через локалку&
главное что бы друг оценил это правильно, а не посылом на три буквы
В этом руководстве мы рассмотрим, как использовать FTP с Python для отправки и получения файлов с сервера через соединения TCP / IP .
Чтобы упростить задачу и сделать ее более абстрактной, мы будем использовать библиотеку Python ftplib, которая предоставляет ряд функций, облегчающих работу с FTP. Мы увидим реализацию для загрузки и выгрузки файлов с сервера, а также некоторые другие интересные вещи, которые позволяет нам делать ftplib.
Как копировать файл через локалку&
да я в курсе что хочу передать свою файл на удаленный компьютер.
можете показать как указать сетевую папку?
я только сегодня научил как указать слово:
qq=raw_input (“слова на английском”)
раньше
qq=input (“слова на английском”)
ошибка: most recent бла бла бла.
П.С. Я не русский.Поэтому прошу прошения за ошибки.
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Как копировать файл через локалку&
да я в курсе что хочу передать свою файл на удаленный компьютер.
можете показать как указать сетевую папку?
я только сегодня научил как указать слово:
qq=raw_input (“слова на английском”)
раньше
qq=input (“слова на английском”)
ошибка: most recent бла бла бла.
П.С. Я не русский.Поэтому прошу прошения за ошибки.
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Как копировать файл через локалку&
да у нас тоже. но я просто повешаю свою квалификацию
знание без жертвы не будет ))
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Как копировать файл через локалку&
Zeclone
на этот форуме падонкафские и прочие херни не нужны. Будьте проще. Здесь адекватные люди сидят.
Нужно экранировать спец символы в строках.
Вы определитесь что вам нужно - в цели говорите что скачать файл с удаленного пк, в коде пытаетесь передать файл на удаленный компьютер
Работа с FTP в Python
Двигаясь дальше, вы будете рады узнать, что ftplib это встроенная библиотека, которая уже установлена с Python, все, что вам нужно сделать, это импортировать ее в свой скрипт и вы можете начать использовать ее функции. Чтобы импортировать его, используйте следующую команду:
После этого нам нужно установить соединение с FTP-сервером, с которым мы хотим открыть канал связи. Для этого создайте экземпляр ftp :
Вышеуказанный метод использует порт по умолчанию, то есть порт 21, для установления соединения с сервером. Следующим шагом является предоставление учетных данных для входа в систему, то есть вашего имени пользователя и пароля, чтобы получить доступ к файлам на сервере. Для этого вы можете использовать следующий метод:
Теперь, когда мы установили соединение с сервером, мы хотим перейти к каталогу, в котором мы хотим выполнить операции, т.е. получить или записать файл. Для этого мы изменим «текущий рабочий каталог», используя следующую команду:
Давайте теперь обсудим некоторые основные примеры того, как получить файл из каталога или записать файл в каталог. Объяснение кода предоставляется в комментариях рядом с каждой строкой кода:
В приведенном выше вызове retrbinary 1024 означает, что файл будет загружен блоками по 1024 байта, пока не будет передан весь файл.
Есть еще одна вещь, которую вам нужно сделать после загрузки или отправке файла - закройте этот файл, а также закройте открытое вами соединение FTP. Вы можете сделать это для приведенного выше примера с помощью следующих двух строк кода:
Давайте теперь попробуем загрузить файл на сервер. В дополнение к приведенным ниже командам вам также придется переписать команды, которые мы использовали выше, чтобы открыть FTP-соединение.
В приведенных выше примерах «rb» и «wb» означают «чтение двоичного файла» и «запись двоичного файла» соответственно.
Как копировать файл через локалку&
главное что бы друг оценил это правильно, а не посылом на три буквы
как написать код для Питона?
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Дополнительные функции FTP
Теперь, когда мы обсудили реализацию основных функций, давайте рассмотрим некоторые дополнительные функции, которые предоставляет нам ftplib .
Список файлов и каталогов
Чтобы просмотреть файлы и папки в текущем рабочем каталоге, в виде списка, выполните команду retrlines :
Создать новый каталог
Чтобы организовать ваши файлы определенным образом, вам может потребоваться создать новый каталог на сервере, что можно сделать с помощью одной строки кода:
Путь будет тем местом, в котором вы хотите разместить новый каталог.
Удалить файл с сервера
Проверить текущий путь
Чтобы проверить текущий путь, просто запустите следующий код:
Эта команда вернет абсолютный путь к текущему рабочему каталогу.
Важно отметить, что, хотя FTP сам по себе достаточно безопасен, он обычно не используется для передачи конфиденциальной информации; если вы передаете что-то подобное, вам следует использовать более безопасные опции, такие как SFTP (Secure FTP) или SSH (Secure Shell). Это наиболее часто используемые протоколы для обработки конфиденциальных данных.
Заключение
В этом посте мы обсудили, что такое FTP и как он работает, с помощью различных примеров. Мы также увидели, как использовать модуль Python «ftplib» для связи с удаленным сервером по FTP, и увидели некоторые другие функции, которые предлагает этот модуль. В конце мы также обсудили некоторые более безопасные альтернативы FTP, такие как SFTP и SSH, которые используются для передачи конфиденциальной информации.
Для получения дополнительной информации об использовании FTP с Python см. Официальную документацию по ftplib или RFC 959 .
Как копировать файл через локалку&
не силен в терминологии, но то что это вредоносное ПО это факт. А это в большинстве развитых стран преступление административного или даже уголовного характера.
Как копировать файл через локалку&
Написал программу, потом скомпилировал на .exe, скопировал на компьютер “друга”.переименовал как “п*рно”.он открыл этот файл. потом некоторые файлы автоматический отправился к мою комп.
нууу .. незнаю точно но могу звать этот файл как “троян”. как вы думаете?
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Как копировать файл через локалку&
Zeclone
на этот форуме падонкафские и прочие херни не нужны. Будьте проще. Здесь адекватные люди сидят.
Нужно экранировать спец символы в строках.
Вы определитесь что вам нужно - в цели говорите что скачать файл с удаленного пк, в коде пытаетесь передать файл на удаленный компьютер
Что такое FTP?
FTP обозначает протокол передачи файлов; он основан на архитектуре модели клиент-сервер и широко используется. Имеет два канала; командный канал и канал данных. Командный канал используется для управления связью, а канал данных используется для фактической передачи файлов. С помощью FTP вы можете делать множество вещей, таких как перемещение, загрузка, копирование файлов и т.д. Мы обсудим это в следующем разделе, а также подробно расскажем, как это сделать с помощью Python.
Как копировать файл через локалку&
не силен в терминологии, но то что это вредоносное ПО это факт. А это в большинстве развитых стран преступление административного или даже уголовного характера.
Как копировать файл через локалку&
сейчас под рукой нету сети с Windows, но насколько я помню точно также и указывается, как обычно, но с условием экранирования спец символов т.е. ‘\\\\192.168.3.1\\dostup’ . Гипотетически, если не заработает,то нужно установить пакеты PyWin - но я не уверен в этой информации, давно было, с тех пор больше не трогал.
Как копировать файл через локалку&
сейчас под рукой нету сети с Windows, но насколько я помню точно также и указывается, как обычно, но с условием экранирования спец символов т.е. ‘\\\\192.168.3.1\\dostup’ . Гипотетически, если не заработает,то нужно установить пакеты PyWin - но я не уверен в этой информации, давно было, с тех пор больше не трогал.
Как копировать файл через локалку&
Написал программу, потом скомпилировал на .exe, скопировал на компьютер “друга”.переименовал как “п*рно”.он открыл этот файл. потом некоторые файлы автоматический отправился к мою комп.
нууу .. незнаю точно но могу звать этот файл как “троян”. как вы думаете?
:D Zeclone не русский поэтому просит прошения за ошыбки :D
Читайте также: