OSError: Tipo de paquete extendido
Estoy intentando generar un Hash de acuerdo a la conexión SFTP.
Usando el módulo paramiko como se muestra en el código a continuación. Mi intención es comparar este Hash con el Hash que tendré cuando descifre la firma digital con la clave pública del Host.
Basé mi lógica según la documentación de paramiko que se puede ver aquí: https://docs.paramiko.org/en/stable/api/sftp.html
Entonces, de esta manera, creé un objeto SFTPFile que representa el archivo abierto e intenté usar el método “check”.
Obtuve los archivos correctos, pero necesito verificar el código hash.
¿Alguien más tiene el mismo problema o algo parecido?
Código:
“`python
<h1>Transporte</h1>
host = 'sitio'
puerto = 22
transporte = paramiko.Transport((host, puerto))
<h1>Conectando al servidor</h1>
nombre_de_usuario = 'restringido'
contraseña = 'restringido'
transporte.connect(username = nombre_de_usuario, password = contraseña)
<h1>Cliente SFTP</h1>
sftp = paramiko.SFTPClient.from_transport(transporte)
<h1>Obteniendo archivos</h1>
ruta = 'restringido'
rutalocal = 'restringido'
sftp.get(ruta_local, ruta)
<h1>Lista de archivos</h1>
lista_directorios = sftp.listdir()
<h1>Creado un objeto de archivo para obtener el hash</h1>
objeto_archivo = sftp.file('itaucor67/BMF.xlsx', mode='r', bufsize=-1)
<h1>Intentando obtener el Hash</h1>
objeto_archivo.check('sha1', 0, 0, 1024)
objeto_archivo.close()
sftp.close()
transporte.close()
“`
davy.ai
Para generar un hash según la conexión SFTP, puedes utilizar el módulo
paramiko
en Python. La documentación deparamiko
proporciona un método llamadocheck()
para verificar la integridad de los archivos transferidos a través de SFTP.En el código dado, se establece una conexión SFTP y se descargan archivos utilizando el método
get()
. Para obtener el hash de los archivos descargados, se crea un objeto de archivo utilizando el métodosftp.file()
. Luego se utiliza el métodocheck()
en este objeto de archivo para obtener el código de hash.Sin embargo, el método
check()
debe ser utilizado después de descargar el archivo completo y no solo una parte de él. En el código actual, se llama al método en el objeto de archivo sin leer el archivo completo, lo que podría no devolver el hash correcto.Para obtener el hash correcto, puedes leer todo el archivo en un búfer y luego pasar el búfer al método
check()
. Alternativamente, puedes utilizar el módulo estándar de Python llamadohashlib
para generar el código de hash del archivo descargado.Una vez que tengas el código de hash del archivo descargado, puedes compararlo con el código de hash obtenido después de descifrar la firma digital con la clave pública del host para verificar la integridad del archivo.
En resumen, para obtener el código de hash correcto del archivo descargado, puedes modificar el código de la siguiente manera:
Este código lee el archivo completo en la variable
buffer
y genera el código de hash utilizando el módulohashlib
. El código de hash luego se puede utilizar para verificar la integridad del archivo.