{"library":"sftpserver","title":"sftpserver (rspivak)","description":"sftpserver is a simple, single-threaded SFTP server built upon Paramiko's SFTPServer, primarily designed for testing Python SFTP clients rather than production environments. The current version is 0.3, with its last release in April 2017, indicating a maintenance-only status with no active development or new features.","language":"python","status":"maintenance","last_verified":"Sun May 17","install":{"commands":["pip install sftpserver"],"cli":null},"imports":["import sftpserver\nsftpserver.start_server(...)"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport paramiko\nimport sftpserver\n\n# Generate a test private key if it doesn't exist\nkey_file = 'test_rsa.key'\nif not os.path.exists(key_file):\n    print(f\"Generating new RSA key for the server: {key_file}\")\n    key = paramiko.RSAKey.generate(2048)\n    key.write_private_key_file(key_file)\n    print(\"Key generated. DO NOT use this key for production.\")\n\n# Define SFTP server parameters\nSFTP_HOST = os.environ.get('SFTP_HOST', '127.0.0.1')\nSFTP_PORT = int(os.environ.get('SFTP_PORT', '3373'))\nSFTP_KEY_FILE = os.environ.get('SFTP_KEY_FILE', key_file)\nSFTP_LOG_LEVEL = os.environ.get('SFTP_LOG_LEVEL', 'INFO')\n\nprint(f\"Starting SFTP server on {SFTP_HOST}:{SFTP_PORT}\")\nprint(f\"Using key file: {SFTP_KEY_FILE}\")\nprint(f\"Log level: {SFTP_LOG_LEVEL}\")\nprint(\"Connect with username 'admin', password 'admin' (or any credential if no auth callback is set).\")\nprint(\"Press Ctrl+C to stop the server.\")\n\ntry:\n    sftpserver.start_server(SFTP_HOST, SFTP_PORT, SFTP_KEY_FILE, SFTP_LOG_LEVEL)\nexcept KeyboardInterrupt:\n    print(\"\\nSFTP server stopped.\")\n","lang":"python","description":"This quickstart demonstrates how to start the sftpserver programmatically, generating a temporary RSA key if one doesn't exist. It will listen on 127.0.0.1:3373 by default. Connect with a client using any username/password (e.g., 'admin'/'admin') as the default handler accepts all credentials.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.3","pypi_latest":"0.3","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.1,"avg_import_s":0.8,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.63,"mem_mb":13.2,"disk_size":"41.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.43,"mem_mb":13.2,"disk_size":"42M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.84,"mem_mb":14.5,"disk_size":"44.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.76,"mem_mb":14.5,"disk_size":"45M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.04,"mem_mb":14.6,"disk_size":"45.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.07,"mem_mb":14.6,"disk_size":"45M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.08,"mem_mb":15.5,"disk_size":"44.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":1.05,"mem_mb":15.5,"disk_size":"45M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.58,"mem_mb":12.7,"disk_size":"42.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sftpserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.5,"import_time_s":0.55,"mem_mb":12.7,"disk_size":"42M"}]}}