Чтобы подключиться к серверу SFTP (SSH File Transfer Protocol) с использованием аутентификации на основе ключей в Python, существует несколько доступных методов. Вот некоторые из них:
Метод 1: Библиотека Парамико
Paramiko — популярная библиотека Python, обеспечивающая реализацию протокола SSHv2. Он включает в себя функции SFTP и аутентификацию на основе ключей. Вы можете использовать Paramiko для подключения к SFTP-серверу с использованием файла закрытого ключа. Вот пример:
import paramiko
private_key_path = '/path/to/private_key'
hostname = 'sftp.example.com'
port = 22
username = 'your_username'
# Create an SSH client
client = paramiko.SSHClient()
# Automatically add the server's host key
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Load the private key
private_key = paramiko.RSAKey.from_private_key_file(private_key_path)
# Connect to the SFTP server
client.connect(hostname, port=port, username=username, pkey=private_key)
# Create an SFTP session
sftp = client.open_sftp()
# Now you can perform SFTP operations using the 'sftp' object
# Close the SFTP session and the SSH client
sftp.close()
client.close()
Метод 2: библиотека Pysftp
Pysftp — это библиотека более высокого уровня, созданная на основе Paramiko. Это упрощает процесс подключения к SFTP-серверу и выполнения файловых операций. Вот пример использования Pysftp с аутентификацией на основе ключей:
import pysftp
private_key_path = '/path/to/private_key'
hostname = 'sftp.example.com'
port = 22
username = 'your_username'
# Create a connection using private key authentication
with pysftp.Connection(
host=hostname,
port=port,
username=username,
private_key=private_key_path
) as sftp:
# Now you can perform SFTP operations using the 'sftp' object
# For example:
sftp.get('/remote/path/file.txt', '/local/path/file.txt')
Метод 3: библиотека Paramiko + KeyUtils
Если вы предпочитаете использовать Paramiko напрямую, но с более простым механизмом загрузки ключей, вы можете использовать библиотеку KeyUtils. KeyUtils предоставляет простой способ загрузки закрытых ключей из различных форматов, включая формат OpenSSH. Вот пример:
import paramiko
from keyutils import KeyUtils
private_key_path = '/path/to/private_key'
hostname = 'sftp.example.com'
port = 22
username = 'your_username'
# Load the private key using KeyUtils
private_key = KeyUtils.load_ssh_private_key(private_key_path)
# Create an SSH client
client = paramiko.SSHClient()
# Automatically add the server's host key
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Connect to the SFTP server using key-based authentication
client.connect(hostname, port=port, username=username, pkey=private_key)
# Create an SFTP session
sftp = client.open_sftp()
# Now you can perform SFTP operations using the 'sftp' object
# Close the SFTP session and the SSH client
sftp.close()
client.close()