From c750cfbfcdc9c74f3627a6780a636723384afd7c Mon Sep 17 00:00:00 2001 From: ggil Date: Tue, 11 Feb 2025 10:32:48 +0100 Subject: [PATCH] refs #1482 - Modify Paramiko SSH Client parameters --- README.md | 2 +- api/README.md | 2 +- api/repo_api.py | 17 ++++++++--------- bin/exportImage.py | 3 +-- bin/importImage.py | 3 +-- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index ef48c4b..ac57ae0 100644 --- a/README.md +++ b/README.md @@ -391,7 +391,7 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d Se exportará una imagen del repositorio local a un repositorio remoto. Se puede hacer con el script "**exportImage.py**", que debe ser llamado por el endpoint. -**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse desde ogCore (en el JSON). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse en el JSON. **NOTA2**: Este endpoint puede tardar mucho tiempo, pero no lo hemos hecho asíncrono (porque no es llamado desde el portal), por lo que siempre informará del resultado final de la ejecución (a diferencia del endpoint "Importar una Imagen"), pero dependiendo del tamaño de la imagen, puede tardar bastante. **NOTA3**: Este endpoint no genera el archivo ".torrent", ni comprueba si la exportación se ha realizado correctamente, por lo que posteriormente se debe llamar al endpoint "Crear archivos auxiliares" (para crear el archivo ".torrent" y actualizar el repositorio) y al endpoint "Chequear integridad de Imagen", ambos desde el equipo destino. No es realmente necesario llamar a este último endpoint, pero si recomendado. diff --git a/api/README.md b/api/README.md index 7119543..172b2a4 100644 --- a/api/README.md +++ b/api/README.md @@ -349,7 +349,7 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d Se exportará una imagen del repositorio local a un repositorio remoto. Se puede hacer con el script "**exportImage.py**", que debe ser llamado por el endpoint. -**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse desde ogCore (en el JSON). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse en el JSON. **NOTA2**: Este endpoint puede tardar mucho tiempo, pero no lo hemos hecho asíncrono (porque no es llamado desde el portal), por lo que siempre informará del resultado final de la ejecución (a diferencia del endpoint "Importar una Imagen"), pero dependiendo del tamaño de la imagen, puede tardar bastante. **NOTA3**: Este endpoint no genera el archivo ".torrent", ni comprueba si la exportación se ha realizado correctamente, por lo que posteriormente se debe llamar al endpoint "Crear archivos auxiliares" (para crear el archivo ".torrent" y actualizar el repositorio) y al endpoint "Chequear integridad de Imagen", ambos desde el equipo destino. No es realmente necesario llamar a este último endpoint, pero si recomendado. diff --git a/api/repo_api.py b/api/repo_api.py index 8e17bbd..c4b9105 100644 --- a/api/repo_api.py +++ b/api/repo_api.py @@ -185,9 +185,8 @@ def check_remote_connection(remote_ip, remote_user): # Establecemos la política por defecto para localizar la llave del host localmente: ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - # Conectamos con el equipo remoto por SSH: - ssh_client.connect(remote_ip, 22, remote_user) # Así se hace con claves - #ssh_client.connect(remote_ip, 22, remote_user, 'opengnsys') # Así se haría con password + # Conectamos con el equipo remoto por SSH (con claves): + ssh_client.connect(hostname=remote_ip, port=22, username=remote_user, passphrase='') # Iniciamos un cliente SFTP: sftp_client = ssh_client.open_sftp() @@ -223,9 +222,9 @@ def check_remote_image(remote_ip, remote_user, image_file_path): # Establecemos la política por defecto para localizar la llave del host localmente: ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - # Conectamos con el equipo remoto por SSH: - ssh_client.connect(remote_ip, 22, remote_user) # Así se hace con claves - #ssh_client.connect(remote_ip, 22, remote_user, 'opengnsys') # Así se haría con password + # Conectamos con el equipo remoto por SSH (con claves): + ssh_client.connect(hostname=remote_ip, port=22, username=remote_user, passphrase='') + # Iniciamos un cliente SFTP: sftp_client = ssh_client.open_sftp() @@ -322,9 +321,9 @@ def check_lock_remote(image_file_path, remote_host, remote_user, job_id): # Establecemos la política por defecto para localizar la llave del host localmente: ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - # Conectamos con el equipo remoto por SSH: - ssh_client.connect(remote_host, 22, remote_user) # Así se hace con claves - #ssh_client.connect(remote_host, 22, remote_user, 'opengnsys') # Así se haría con password + # Conectamos con el equipo remoto por SSH (con claves): + ssh_client.connect(hostname=remote_ip, port=22, username=remote_user, passphrase='') + # Iniciamos un cliente SFTP: sftp_client = ssh_client.open_sftp() diff --git a/bin/exportImage.py b/bin/exportImage.py index f97ef44..2ff597d 100644 --- a/bin/exportImage.py +++ b/bin/exportImage.py @@ -120,8 +120,7 @@ def export_image(file_path, remote_host, remote_user): # Intentamos conectar con el equipo remoto por SSH, e iniciar un cliente SFTP, try: # y en caso de fallar devolvemos un error y salimos del script: - ssh_client.connect(remote_host, 22, remote_user) # Así se hace con claves - #ssh_client.connect(remote_host, 22, remote_user, 'opengnsys') # Así se haría con password + ssh_client.connect(hostname=remote_host, port=22, username=remote_user, passphrase='') sftp_client = ssh_client.open_sftp() except Exception as error_description: journal.send(f"exportImage.py: Connection exception: {error_description}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") diff --git a/bin/importImage.py b/bin/importImage.py index e67688e..51dfce8 100644 --- a/bin/importImage.py +++ b/bin/importImage.py @@ -123,8 +123,7 @@ def import_image(file_path, remote_host, remote_user): # Intentamos conectar con el equipo remoto por SSH, e iniciar un cliente SFTP, try: # y en caso de fallar devolvemos un error y salimos del script: - ssh_client.connect(remote_host, 22, remote_user) # Así se hace con claves - #ssh_client.connect(remote_host, 22, remote_user, 'opengnsys') # Así se haría con password + ssh_client.connect(hostname=remote_host, port=22, username=remote_user, passphrase='') sftp_client = ssh_client.open_sftp() except Exception as error_description: journal.send(f"importImage.py: Connection exception: {error_description}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") -- 2.40.1