Error de duplicidad: BackendException: conexión ssh a SERVER_IP: 22 falló: servidor desconocido SERVER_IP

Error de duplicidad: BackendException: conexión ssh a SERVER_IP: 22 falló: servidor desconocido SERVER_IP

Estoy intentando configurar un sistema de respaldo con Duplicity. Tengo un servidor del que quiero hacer una copia de seguridad en otro servidor SFTP.

Si intento conectarme a través de sftp, funciona bien:

    root@SERVER:~# sftp user@SFTP_IP
    user@SFTP_IP's password: 
    Connected to SFTP_IP.
    sftp>

Pero cuando intento usar Duplicidad:

    root@SERVER:~# duplicity /etc sftp://user@SFTP_IP//
    BackendException: ssh connection to SFTP_IP:22 failed: Unknown server SFTP_IP

Intenté seguir las únicas instrucciones sobre este problema que encontré en la red: http://tom.meinlschmidt.org/2014/04/24/duplicity-backendexception-ssh-connection-to-server22-failed-unknown-server/

Sin embargo, no funcionó y dado que el autor casi no da detalles sobre la causa del problema, solo que probablemente sea paramiko, no sé qué hacer.

Mi configuración es la siguiente:

    root@SERVER:~# lsb_release -a
    No LSB modules are available.
    Distributor ID: Debian
    Description:    Debian GNU/Linux 7.7 (wheezy)
    Release:    7
    Codename:   wheezy

    root@SERVER:~# ssh -V
    OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013

    root@SERVER:~# duplicity -V
    duplicity 0.6.18

    root@SERVER:~# python -c "import paramiko; print paramiko.__version__"
    1.7.7.1 (George)

EDITAR1:Ok, el problema no parece provenir estrictamente de paramiko ya que un simple programa de demostración paramiko sftp de 2013 (enlace github) logra conectarse muy bien.

EDITAR2:Tuve este problema en un servidor con una instalación casi nueva de Wheezy, instalé Ubuntu 14.04 (con OpenSSH_6.6.1p1 y paramiko 1.10.1) y Duplicity (0.6.23) funciona bien.

Respuesta1

Ok, he jugado un poco más con el código Python. @lxio tienes razón, esto no es realmente un error de Paramiko o Duplicity, pero parece que el sistema conocido_hosts parece un poco inconsistente (y poco claro), pero finalmente lo hice funcionar.

Solía ssh myhost -p 2323​​​​aceptar la firma, pero este método no parece almacenar el valor del puerto específico en la known_hostslista (por lo tanto, Paramiko se niega a conectarse porque cree que la huella digital es de myhost:21. Todavía no tengo la clave correcta para agregar a través de bash). pero sé cómo agregar la huella digital al known_hostsarchivo a través de Paramiko para asegurar que se conectará al host correcto en el futuro.

Vamos a agregar la clave a través de Paramiko al archivo conocido_hosts:

  1. Editar /usr/share/pyshared/duplicity/backends/sshbackend.py:

Añadir antes keyfilename=None:

self.client.load_host_keys("/root/.ssh/known_hosts")
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

(/root/ es el directorio de usuario aquí, esto podría ser diferente para usted).

  1. Ejecute un comando de sincronización con Duplicity (donde usa el host). Ahora Paramiko agregará la huella digital ssh a sus hosts_conocidos.

  2. Elimine todas las ediciones que haya realizado sshbackend.pyy guarde el archivo.

Puedes verificarlo usando cat /root/.ssh/known_hosts. Ya verás[myhost]:2323 ssh-rsa ....

Respuesta2

eso puede suceder si el servidor no está en su archivo .ssh/known_hosts. simplemente inicie sesión una vez a través de ssh y acepte agregarlo y el error desaparecerá.

Respuesta3

Recuerde que es un truco, ya que aceptará cualquier huella digital del host.

Quizás un poco tarde, pero yo mismo encontré el problema: es un error en paramiko y aún no se ha solucionado...

Necesita parchear manualmente la duplicidad (archivo /usr/share/pyshared/duplicity/backends/sshbackend.py):

--- sshbackend.py.orig  2012-04-10 12:32:27.000000000 +1000
+++ sshbackend.py       2012-04-10 12:38:10.000000000 +1000
@@ -127,6 +127,10 @@
         if (m!=None):
             keyfilename=m.group(1)

+        # workaround for #668239 in paramiko: port!=22 causes key lookup to fail
+        # but the default policy is to reject unknown keys...
+        self.client.set_missing_host_key_policy(paramiko.WarningPolicy())
+
         if parsed_url.port:
             portnumber=parsed_url.port
         else:

Fuente: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668229

información relacionada