Duplicity 错误:BackendException:与 SERVER_IP:22 的 ssh 连接失败:未知服务器 SERVER_IP

Duplicity 错误:BackendException:与 SERVER_IP:22 的 ssh 连接失败:未知服务器 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,因为 2013 年有一个简单的 paramiko sftp 演示程序(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 添加密钥,但我知道如何通过 Paramiko 将指纹添加到文件中,known_hosts以确保它将来能够连接到正确的主机。

我们将通过 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 中的一个错误,仍然没有修复......

您需要手动修补 duplicity (文件/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

相关内容