Мы уже рассказывали про SSH с использованием Paramiko. Сегодня рассмотрим Pysftp — обертку Paramiko, которая поддерживает удаленное подключение и передачу файлов по SSH.
Еще по теме: Paramiko для брута SSH на Python
Что такое Pysftp
Pysftp — это библиотека на Python, которая предоставляет удобный интерфейс для работы с удаленными серверами по протоколу SSH (Secure Shell).
С помощью Pysftp можно устанавливать SSH-соединения с удаленными серверами, выполнять команды на этих серверах и передавать файлы между локальной машиной и удаленным сервером.
Она предоставляет удобный и интуитивно понятный способ работы с удаленными ресурсами через защищенное соединение.
Возможности Pysftp:
- Простой интерфейс
- Передача файлов
- Автоматическое управление соединением
- Работа с SSH-ключами
SSH-соединение с помощью Pysftp на Python
Чтобы установить pysftp в вашей среде с помощью pip, выполните следующую команду:
1 |
$ python3 -m pip install pysftp |
В следующем примере мы выводим список файлов из определённого каталога.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import pysftp import getpass HOSTNAME = 'localhost' PORT = 22 def sftp_getfiles(username, password, hostname=HOSTNAME, port=PORT): cnopts = pysftp.CnOpts(knownhosts='known_hosts') # Load the public SSH key into the known hosts file cnopts.hostkeys.load('/home/linux/.ssh/known_hosts') with pysftp.Connection(host=hostname, username=username, password=password, cnopts=cnopts) as sftp: print("Connection successfully established with server... ") sftp.cwd('/') list_directory = sftp.listdir_attr() for directory in list_directory: print(directory.filename, directory) if __name__ == '__main__': hostname = input("Enter the target hostname: ") port = input("Enter the target port: ") username = input("Enter your username: ") password = getpass.getpass(prompt="Enter your password: ") sftp_getfiles(username, password, hostname, port) |
Скрипт выводит содержимое каталога, используя метод listdir_attr().
После установки соединения с сервером, используем метод cwd(), чтобы перейти в корневой каталог, указав путь к каталогу в качестве первого аргумента.
Используя инструкцию with, соединение автоматически закрывается в конце блока, и нам не нужно вручную закрывать соединение с сервером.
1 |
$ python testing_pysftp.py |
Мы видим, как он возвращает все файлы в удаленном каталоге после запроса соединения для передачи данных на сервер localhost.
Больше информации об этом пакете можно найти в репозитории PyPI.
Теперь вы знаете основы подключения и передачи файлов с SSH-сервера с помощью paramiko и pysftp.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Установка и использование Python в Kali Linux
- Проверка безопасности SSH-сервера (ssh-audit / онлайн)
- Перечисление и получение информации об SSH при пентесте