口是心非錯誤:BackendException:與 SERVER_IP:22 的 ssh 連線失敗:未知伺服器 SERVER_IP

口是心非錯誤:BackendException:與 SERVER_IP:22 的 ssh 連線失敗:未知伺服器 SERVER_IP

我正在嘗試使用口是心非來設定備份系統。我有一台伺服器想要備份到另一台 SFTP 伺服器。

如果我嘗試透過 sftp 連接,它工作正常:

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

但是當我嘗試使用口是心非時:

    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 中的一個錯誤,但仍未修復...

您需要手動修補口是心非(檔案/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

相關內容