
我正在嘗試使用口是心非來設定備份系統。我有一台伺服器想要備份到另一台 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 檔案:
- 編輯
/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/ 是這裡的使用者目錄,這對你來說可能不同)。
使用 Duplicity(您使用主機的地方)執行同步突擊隊。現在,Paramiko 會將 ssh 指紋加入您的known_hosts 中。
刪除您對文件所做的所有編輯
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