Servidor SFTP para responder con un archivo HTTPS

Servidor SFTP para responder con un archivo HTTPS

Tengo un servidor REST-API por HTTPS. Necesito una forma de llamar a la API cuando se recupera un archivo mediante SFTP. El contenido se genera dinámicamente por solicitud. ¿Existe una forma sencilla de hacerlo sin tener que agregar cuentas de usuario e introducir agujeros de seguridad en el servidor? Tener la clave permitirá que cualquiera pueda obtener el contenido del archivo, pero nada más.

Esto es lo que tengo:

GET https://myservice/api/items/get?key=XXXX

y al hacer esto se devolverá lo mismo:

sftp XXXX@myservice:/items (or sftp myservice:/items/XXXX)

Respuesta1

IpensarEntiendo lo que dices. Quiere generar un archivo basado en el usuario actual (o archivo solicitado). Actualmente lo haces a través de HTTPS pero también quieres que esté disponible a través de SFTP... ¿Verdad? Interesante problema.

Es posible que te sorprenda saber que no creo que haya nada que pueda hacer lo que estás pidiendo de forma inmediata... Sin embargo, todo es posible.


¡Mi primer enfoque implica escribir su propio sistema de archivos!

Yo empezaría con FUSE. Además, Python-fuse. Aquí estáel único tutorial que he usadopara FUSIBLE. Te llevará al punto en el que podrás empezar a editar cosas. Me gustaría:

  • Haga que enumere solo un archivo [falso] enreaddir()
  • Descubra cómo encontrar el nombre de usuario en el sistema de archivos
  • Hotwire open()y read()para extraer de requests.get('your URL')usando el nombre de usuario. open()Es posible que simplemente deba ser falsificado y read()manejar la requestssolicitud.
  • Probablemente necesitarás parchear y simular muchos de los otros métodos para que devuelvan datos, pero obviamente serán falsos la mayor parte del tiempo.
  • Monte este sistema de archivos FUSE en algún lugar de su SFTP que todos puedan ver como de solo lectura

Esto funcionaría para cualquier enfoque sftp (por ejemplo, podrías ver la ruta completa en lugar del usuario), pero necesitarás una única cuenta sftp con la que las personas puedan iniciar sesión.


Alternativamente, si cada usuario tiene una cuenta, puede intentar monitorear el acceso a un directorio propiedad de cada usuario. inotifywatchy inotifywaitpuede permitirle observar el acceso a un directorio.

inotifywait -mrq --format '%w' /home/*/magicdir/ | while read DIR; do
    user=${DIR:6:-10}  # that is based on the length of /home/ and /magicdir/
    wget -qO $DIR https://path/to/items/${user}
done

Y déjelo ejecutándose en algún lugar en segundo plano. Actualizará el archivo desde el sitio web cada vez que accedan al directorio. Es posible que desees verificarlo (con un echo blaaa $DIR) para asegurarte de que no esté dañando el servidor. Es posible que no muestre un archivo la primera vez que cargan el directorio.

información relacionada