Erro de duplicidade: BackendException: conexão ssh com SERVER_IP:22 falhou: servidor desconhecido SERVER_IP

Erro de duplicidade: BackendException: conexão ssh com SERVER_IP:22 falhou: servidor desconhecido SERVER_IP

Estou tentando configurar um sistema de backup com Duplicity. Tenho um servidor do qual desejo fazer backup em outro servidor SFTP.

Se eu tentar conectar via sftp, tudo funcionará bem:

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

Mas quando tento usar o Duplicity:

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

Tentei seguir as únicas instruções sobre esse problema que encontrei na rede: http://tom.meinlschmidt.org/2014/04/24/duplicity-backendexception-ssh-connection-to-server22-failed-unknown-server/

No entanto, não funcionou e como o autor quase não dá detalhes sobre a causa do problema, apenas que provavelmente é paramiko, não consigo descobrir o que fazer.

Minha configuração é a seguinte:

    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, o problema não parece vir estritamente do paramiko, já que um simples programa de demonstração do paramiko sftp de 2013 (link do github) consegue se conectar perfeitamente.

EDITAR2:Eu tive esse problema em um servidor com uma instalação quase nova do Wheezy, instalei um Ubuntu 14.04 (com OpenSSH_6.6.1p1 e paramiko 1.10.1) nele e o Duplicity (0.6.23) funciona bem.

Responder1

Ok, brinquei mais um pouco com o código python. @lxio você está certo, isso não é realmente um bug do Paramiko ou Duplicity, mas parece que o sistemaknown_hosts parece um pouco inconsistente (e pouco claro), mas finalmente consegui fazê-lo funcionar.

Eu costumava ssh myhost -p 2323aceitar a assinatura, mas esse método não parece armazenar o valor da porta específico na known_hostslista (portanto, o Paramiko está se recusando a conectar, porque acha que a impressão digital é de myhost:21. Ainda não tenho o correto para adicionar a chave via bash, mas sei como adicionar a impressão digital ao known_hostsarquivo via Paramiko para garantir que ele se conectará ao host correto no futuro.

Vamos adicionar a chave via Paramiko ao arquivoknown_hosts:

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

Acrescentar antes keyfilename=None:

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

(/root/ é o userdir aqui, isso pode ser diferente para você).

  1. Execute um comando de sincronização com Duplicity (onde você usa o host). Agora Paramiko adicionará a impressão digital ssh aos seus conhecidos_hosts.

  2. Remova todas as edições feitas sshbackend.pye salve o arquivo.

Você pode verificar isso usando cat /root/.ssh/known_hosts. Você verá[myhost]:2323 ssh-rsa ....

Responder2

isso pode acontecer se o servidor não estiver no seu arquivo .ssh/known_hosts. basta fazer login uma vez via ssh e concordar em adicioná-lo e o erro desaparecerá.

Responder3

Lembre-se de que isso é um hack, pois você aceitará qualquer impressão digital do host

Talvez um pouco tarde, mas como eu mesmo encontrei o problema: é um bug no paramiko e ainda não foi corrigido...

Você precisa corrigir manualmente a duplicidade (arquivo /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:

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

informação relacionada