Ошибка дублирования: BackendException: ssh-подключение к SERVER_IP:22 не удалось: Неизвестный сервер SERVER_IP

Ошибка дублирования: BackendException: ssh-подключение к SERVER_IP:22 не удалось: Неизвестный сервер SERVER_IP

Я пытаюсь настроить систему резервного копирования с Duplicity. У меня есть сервер, который я хочу резервировать на другом сервере SFTP.

Если я попробую подключиться через sftp, то все работает нормально:

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

Но когда я пытаюсь использовать Duplicity:

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

Я попробовал следовать единственным инструкциям по этой проблеме, которые я нашел в сети: http://tom.meinlschmidt.org/2014/04/24/duplicity-backendexception-ssh-connection-to-server22-failed-unknown-server/

Однако это не сработало, и поскольку автор почти не дает подробностей о причинах проблемы, указывая только, что это, вероятно, Paramiko, я не могу понять, что делать.

Моя конфигурация следующая:

    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)

ПРАВКА1:Хорошо, проблема, похоже, исходит не только от Paramiko, поскольку простая демонстрационная программа Paramiko sftp от 2013 года (github-ссылка) прекрасно подключается.

ПРАВКА2:У меня возникла эта проблема на сервере с почти новой установкой Wheezy. Я установил на него Ubuntu 14.04 (с OpenSSH_6.6.1p1 и paramiko 1.10.1), и Duplicity (0.6.23) работает нормально.

решение1

Хорошо, я еще немного повозился с кодом Python. @lxio, ты прав, это не совсем ошибка Paramiko или Duplicity, но, похоже, система known_hosts немного непоследовательна (и непонятна), но в конце концов мне удалось заставить ее работать.

Раньше я ssh myhost -p 2323принимал подпись, но этот метод, похоже, не сохраняет конкретное значение порта в known_hostsсписке (поэтому Paramiko отказывается подключаться, поскольку думает, что отпечаток принадлежит ) myhost:21. У меня по-прежнему нет правильного способа добавить ключ через bash, но я знаю, как добавить отпечаток в known_hostsфайл через Paramiko, чтобы гарантировать, что он будет подключаться к правильному хосту в будущем.

Мы добавим ключ через Paramiko в файл known_hosts:

  1. Редактировать /usr/share/pyshared/duplicity/backends/sshbackend.py:

Добавить перед keyfilename=None:

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

(/root/ — это каталог пользователя, у вас он может быть другим).

  1. Выполните команду синхронизации с Duplicity (где вы используете хост). Теперь Paramiko добавит отпечаток ssh в ваш known_hosts.

  2. Удалите все внесенные вами изменения sshbackend.pyи сохраните файл.

Вы можете проверить это, используя cat /root/.ssh/known_hosts. Вы увидите[myhost]:2323 ssh-rsa ....

решение2

это может произойти, если сервер отсутствует в вашем файле .ssh/known_hosts. Просто войдите один раз через ssh и согласитесь добавить его, и ошибка исчезнет.

решение3

Пожалуйста, помните, что это взлом, так как вы примете любой отпечаток пальца хоста.

Может быть, немного поздно, но я сам столкнулся с этой проблемой: это ошибка в Paramiko, и она до сих пор не исправлена...

Вам необходимо вручную исправить дублирование (файл /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:

Источник: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668229

Связанный контент