2013-02-01 6 views
10

一部のサーバープロセスの自動化を改善しようとしています。私たちはFabricを使います。私は複数のホストを管理しなければならないと予想しています。これは以前にSSHされていないサーバーに対してSSH接続を行う必要があることを意味します。そのようなことが起こると、SSHは常に接続の検証を要求し、自動化が中断されます。FabricでSSHオプションを渡すには?

コードをrsyncと同期させるために使用するSSHコマンドで、同じプロセスで-o stricthostkeychecking=noオプションを使用してこの問題を回避しましたが、Fabricを使用したコールでも使用する必要があります。

Fabricにssh固有のオプションを渡す方法はありますか?

答えて

8

短い答えは:

  1. 新しいホストの場合、何も必要ありません。 env.reject_unknown_hostsのデフォルトはFalse
  2. 変更されたキーを持つ既知のホストの場合、env.disable_known_hosts = Trueは変更されたホストへの接続を続行することにします。

読むイェオールドドキュメント:http://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts

paramikoライブラリがロードアップあなたのknown_hostsファイルを、 することができ、その後、そのマッピングと、それが接続するすべてのホストを比較します。 設定が不明なホスト が(そのユーザ名またはIPホストがknown_hostsファイルに見つからない)見たとき何が起こるかを決定するために利用可能である:

  • は拒否:ホストキーは拒否され、接続が行われていません。この結果、Pythonの例外が発生し、ホストが不明であることを示すメッセージでFabricセッションが終了します。
  • 追加:新しいホストキーが既知のホストのメモリ内リストに追加され、接続が確立され、物事は正常に続きます。これはディスク上のknown_hostsファイルを変更しないことに注意してください!
  • 質問:ファブリックレベルではまだ実装されていませんが、これはparamikoライブラリオプションで、ユーザには未知のキーとそれを受け入れるかどうかを尋ねられます。

上記のように、ホストを拒否するか、追加するかどうか、 便宜上、デフォルトでFalseです env.reject_unknown_hostsオプションを介して生地に制御されています。私たちはこれが の便利さとセキュリティの間の有効なトレードオフだと感じています。そうでなければ誰でも簡単にモジュールレベルで のfabfilesを変更してenv.reject_unknown_hosts = Trueに設定することができます。

http://docs.fabfile.org/en/1.5/usage/ssh.html#known-hosts-with-changed-keys

変更キー

既知のホスト

man-in-the-middle攻撃を検出できるようにSSHのキー/指紋追跡の点である:攻撃者リダイレクトする場合 自分の管理下にあるコンピュータにSSHトラフィックを送り、元の宛先サーバが のふりをすると、ホストキーが一致しません。したがって、 のSSH(およびそのPython実装)のデフォルトの動作は known_hostsに以前に記録されたホストが突然私たちに別のホスト鍵の送信を開始するとすぐに接続を中断します。

一部のEC2展開などの一部のケースでは、 がこの潜在的な問題を無視したい場合があります。私たちのSSH層は、書いている時点では、 は正確な動作を制御できませんが、既知のホストの読み込みをスキップするだけで を回避できます。ホストリスト が空であれば、それはありません問題。この動作を実行する場合は、 のenv.disable_known_hostsをTrueに設定します。デフォルトのSSH動作を維持するために、デフォルトでは Falseです。

警告env.disable_known_hostsを有効にすると、 man-in-the-middle攻撃が広がってしまいます。慎重に使用してください。

+0

素晴らしい、ありがとう! –

関連する問題