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: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 経由でキーを追加する正しい方法はまだわかりませんが、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 のバグであり、まだ修正されていません...

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

関連情報