Назад | Перейти на главную страницу

Ошибка дублирования: 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) работает нормально.

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

я использовал ssh myhost -p 2323 принять подпись, но этот метод, похоже, не сохраняет конкретное значение порта в known_hosts list (таким образом, 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 ....

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

Может быть, немного поздно, но поскольку я сам столкнулся с проблемой: это ошибка в 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

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