Как получить доступ к SFTP-серверу, используя PySftp в Python

Обработка вещей через SFTP с помощью собственных сценариев всегда может быть полезна, если вы работаете с Python, PySftp — это библиотека, которая необходима для работы с этой технологией без головной боли, поскольку ее довольно легко использовать. pysftp — это оболочка вокруг Paramiko с более Python-интерфейсом. Библиотека Paramiko — это отличная библиотека Python, которая является основой pysftp. Методы, созданные pysftp, являются абстракциями, которые служат производительности программиста, инкапсулируя многие из случаев использования функций более высокого уровня взаимодействия с SFTP. Вместо того, чтобы писать свой собственный код для обхода каталогов и вызывать get и put, он имеет дело не только с paramiko, но и с собственными модулями Python и os, а также с написанием тестов (многие фрагменты кода в сети неполные и не учитывают крайние случаи). полная библиотека для работы со всеми тремя. Оставляя вас сосредоточиться на своей основной задаче.

1. Установите PySftp

Интерфейс pysftp не раскрывает всех возможностей Paramiko, но абстрагирует множество функций в отдельных методах. С другой стороны, pysftp реализует более высокоуровневые функции поверх Paramiko, в частности, рекурсивную передачу файлов.

Чтобы установить pysftp в вашей среде с помощью Pip, выполните следующую команду:

python -m pip install pysftp

Для получения дополнительной информации о PySftp не забудьте посетить официальный сайт документации здесь или же хранилище pyp здесь.

2. Использование

Использование этой библиотеки и нескольких задач, которые необходимо выполнить с этой библиотекой, будет показано в основном на множестве примеров:

Список файлов из каталога

Вы можете перечислить содержимое каталога, используя следующий фрагмент. После открытия соединения вам нужно переключиться из каталога с помощью метода cwd или chdir и предоставить удаленный каталог в качестве первого аргумента:

import pysftp
myHostname = "yourserverdomainorip.com"
myUsername = "root"
myPassword = "12345"
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
print "Connection succesfully stablished ... "
# Switch to a remote directory
sftp.cwd('/var/www/vhosts/')
# Obtain structure of the remote directory '/var/www/vhosts'
directory_structure = sftp.listdir_attr()
# Print data
for attr in directory_structure:
print attr.filename, attr
# connection closed automatically at the end of the with-block

Это напечатает строку в консоли с SFTPAttributes объект каждого файла / каталога в удаленном каталоге. Список в произвольном порядке. Он не включает специальные записи entries. ’И‘ .. ’. Каждый из возвращенных объектов SFTPAttributes будет иметь дополнительное поле: длинное имя, которое может содержать отформатированную строку атрибутов файла в формате unix. Содержимое этой строки будет зависеть от сервера SFTP:

.skel drwxr-xr-x   1 0        0            4096 10 Jul 17:39 .skel
bestfreehtmlcsstemplates.com drwx--x---   1 10002    1002         4096 22 Jul 15:51 bestfreehtmlcsstemplates.com
chroot drwxr-x---   1 0        0            4096 10 Jul 17:39 chroot
default drwxr-xr-x   1 0        0            4096 10 Jul 17:36 default
eagle148.startdedicated.com drwx--x---   1 10000    1002         4096 25 Jul 17:53 eagle148.startdedicated.com
fs drwxr-xr-x   1 0        0            4096 10 Jul 18:03 fs
fs-passwd drwxr-x---   1 999      33           4096 10 Jul 18:03 fs-passwd
helpexe.ru drwx--x---   1 10001    1002         4096 10 Sep 15:30 site.com
system drwxr-xr-x   1 0        0            4096 19 Jul 10:26 system

Скачать удаленный файл

Чтобы загрузить удаленный файл, откройте соединение и из экземпляра sftp используйте метод get, который ожидает путь к удаленному файлу, который будет загружен, и в качестве второго аргумента локальный путь, где должен храниться файл:

import pysftp
myHostname = "yourserverdomainorip.com"
myUsername = "root"
myPassword = "12345"
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
print "Connection succesfully stablished ... "
# Define the file that you want to download from the remote directory
remoteFilePath = '/var/integraweb-db-backups/TUTORIAL.txt'
# Define the local path where the file will be saved
# or absolute "C:\Users\sdkca\Desktop\TUTORIAL.txt"
localFilePath = './TUTORIAL.txt'
sftp.get(remoteFilePath, localFilePath)
# connection closed automatically at the end of the with-block

Загрузить файл

Чтобы загрузить файл на ваш сервер через SFTP, просто используйте метод put клиента SFTP. Этот метод ожидает в качестве первого аргумента относительный или абсолютный локальный путь к файлу, который вы хотите загрузить, а в качестве второго аргумента — удаленный путь, куда файл должен быть загружен:

import pysftp
myHostname = "yourserverdomainorip.com"
myUsername = "root"
myPassword = "12345"
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
print "Connection succesfully stablished ... "
# Define the file that you want to upload from your local directorty
# or absolute "C:\Users\sdkca\Desktop\TUTORIAL2.txt"
localFilePath = './TUTORIAL2.txt'
# Define the remote path where the file will be uploaded
remoteFilePath = '/var/integraweb-db-backups/TUTORIAL2.txt'
sftp.put(localFilePath, remoteFilePath)
# connection closed automatically at the end of the with-block

Удалить файл

Если вы хотите удалить файл с вашего сервера, вы можете сделать это с помощью метода remove, который в качестве первого аргумента ожидает абсолютный путь к удаленному файлу:

import pysftp
myHostname = "yourserverdomainorip.com"
myUsername = "root"
myPassword = "12345"
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
print "Connection succesfully stablished ... "
# Define the file that you want to upload from your local directorty
sftp.remove('/var/custom-folder/TUTORIAL2.txt')
# connection closed automatically at the end of the with-block

Помните, что PySftp имеет широкий спектр методов, которые вы можете использовать для выполнения нескольких задач, таких как обработка разрешений и т. Д., Поэтому не забудьте оформить заказ официальный сайт документации здесь.

Ссылка на основную публикацию
Adblock
detector