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

2

Estou tentando configurar um sistema de backup com o Duplicity. Eu tenho um servidor que eu quero fazer backup para outro servidor SFTP.

Se eu tentar conectar via sftp, tudo funciona bem:

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

Mas quando eu tento usar o Duplicity:

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

Eu tentei seguir as únicas instruções sobre esse problema que encontrei na net: link

No entanto, não funcionou e, como o autor não dá quase nenhum detalhe sobre o que causa o problema, apenas 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)

EDIT1: Ok, o problema não parece vir estritamente do paramiko desde um simples programa de demonstração do paramiko sftp de 2013 (github-link ) consegue se conectar bem.

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

    
por Ixio 04.03.2015 / 15:42

3 respostas

2

Ok, eu brinquei um pouco mais com o código python. @lxio você está certo, isso não é realmente um bug da Paramiko ou Duplicity, mas parece que o sistema known_hosts parece ser um pouco inconsistente (e pouco claro), mas finalmente consegui trabalhar.

Eu usei ssh myhost -p 2323 para aceitar a assinatura, mas esse método não parece armazenar o valor de porta específico na lista known_hosts (assim a Paramiko se recusando a se conectar, porque acha que a impressão digital é de myhost:21 . Eu ainda não tenho correto para adicionar a chave via bash, mas eu sei como adicionar a impressão digital ao arquivo known_hosts via Paramiko para garantir que ele irá se conectar ao host correto no futuro.

Vamos adicionar a chave via Paramiko ao arquivo known_hosts:

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

Adicione antes de 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 known_hosts.

  2. Remova todas as edições feitas no seu sshbackend.py e salve o arquivo.

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

    
por 10.06.2015 / 23:46
0

Por favor, lembre-se que é um hack, já que você aceitará qualquer impressão digital do host

Talvez um pouco atrasado, 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: link

    
por 09.06.2015 / 19:53
-1

isso pode acontecer se o servidor não estiver no seu arquivo .ssh / known_hosts. simplesmente faça o login uma vez via ssh e concorde em adicioná-lo e o erro desaparecerá.

    
por 04.03.2015 / 21:27