Duplicity-Fehler: BackendException: SSH-Verbindung zu SERVER_IP:22 fehlgeschlagen: Unbekannter Server SERVER_IP

Duplicity-Fehler: BackendException: SSH-Verbindung zu SERVER_IP:22 fehlgeschlagen: Unbekannter Server SERVER_IP

Ich versuche, mit Duplicity ein Backup-System einzurichten. Ich habe einen Server, den ich auf einem anderen SFTP-Server sichern möchte.

Wenn ich versuche, eine Verbindung über SFTP herzustellen, funktioniert es einwandfrei:

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

Aber wenn ich versuche, Duplicity zu verwenden:

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

Ich habe versucht, die einzigen Anweisungen zu diesem Problem zu befolgen, die ich im Internet gefunden habe: http://tom.meinlschmidt.org/2014/04/24/duplicity-backendexception-ssh-connection-to-server22-failed-unknown-server/

Es funktionierte jedoch nicht und da der Autor kaum Einzelheiten zu den Ursachen des Problems angibt, sondern nur sagt, dass es sich wahrscheinlich um Paramiko handelt, weiß ich nicht, was ich tun soll.

Meine Konfiguration ist wie folgt:

    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)

BEARBEITEN1:Ok, das Problem scheint nicht ausschließlich von Paramiko herzurühren, da ein einfaches Paramiko-SFTP-Demoprogramm aus dem Jahr 2013 (GitHub-Link) kann problemlos eine Verbindung herstellen.

EDIT2:Ich hatte dieses Problem auf einem Server mit einer fast brandneuen Wheezy-Installation. Ich habe darauf Ubuntu 14.04 (mit OpenSSH_6.6.1p1 und Paramiko 1.10.1) installiert und Duplicity (0.6.23) funktioniert einwandfrei.

Antwort1

Ok, ich habe noch ein bisschen mit dem Python-Code herumgespielt. @lxio, du hast Recht, das ist nicht wirklich ein Fehler von Paramiko oder Duplicity, aber das known_hosts-System scheint ein bisschen inkonsistent (und unklar) zu sein, aber ich habe es endlich zum Laufen gebracht.

Früher habe ich ssh myhost -p 2323die Signatur akzeptiert, aber diese Methode scheint den spezifischen Portwert nicht in der known_hostsListe zu speichern (deshalb verweigert Paramiko die Verbindung, weil es denkt, der Fingerabdruck sei von ) myhost:21. Ich habe noch keine Möglichkeit, den Schlüssel über Bash hinzuzufügen, aber ich weiß, wie ich den Fingerabdruck über Paramiko zur known_hostsDatei hinzufüge, um sicherzustellen, dass in Zukunft eine Verbindung zum richtigen Host hergestellt wird.

Wir werden den Schlüssel über Paramiko zur Datei known_hosts hinzufügen:

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

Füge vorher hinzu keyfilename=None:

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

(/root/ ist hier das Benutzerverzeichnis, bei Ihnen kann es anders sein).

  1. Führen Sie ein Synchronisierungskommando mit Duplicity aus (wo Sie den Host verwenden). Jetzt fügt Paramiko den SSH-Fingerabdruck zu Ihren bekannten Hosts hinzu.

  2. Entfernen Sie alle vorgenommenen Änderungen sshbackend.pyund speichern Sie die Datei.

Sie können dies mit überprüfen cat /root/.ssh/known_hosts. Sie werden sehen[myhost]:2323 ssh-rsa ....

Antwort2

das kann passieren, wenn der Server nicht in Ihrer .ssh/known_hosts-Datei ist. Melden Sie sich einfach einmal per SSH an und stimmen Sie dem Hinzufügen zu. Dann verschwindet der Fehler.

Antwort3

Bitte denken Sie daran, dass es sich um einen Hack handelt, da Sie jeden Fingerabdruck des Hosts akzeptieren

Vielleicht ein bisschen spät, aber ich bin selbst auf das Problem gestoßen: Es ist ein Fehler in Paramiko und noch immer nicht behoben ...

Sie müssen die Duplizität (Datei /usr/share/pyshared/duplicity/backends/sshbackend.py) manuell patchen:

--- 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:

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

verwandte Informationen