
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_hosts
lista (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_hosts
archivo 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:
- 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).
Ejecute un comando de sincronización con Duplicity (donde usa el host). Ahora Paramiko agregará la huella digital ssh a sus hosts_conocidos.
Elimine todas las ediciones que haya realizado
sshbackend.py
y 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