web-dev-qa-db-ja.com

Terraformは、インフラストラクチャの変更時に「known_hosts」を処理しますか?もしそうなら、どのように?

私はテラフォームに非常に慣れていないので、これは大きな質問ではないかもしれません。しかし、私は[このAmazon EC2の例]を実行していて、ある時点でマシンにSSHで接続しようとしているので、nginxをインストールすると想定しています。これは私にとって常に爆撃であり、サーバーへのログインが繰り返し試行されるのを目にします。

これはおそらく、この最初のログイン試行で、SSHがリモートマシンを信頼してknown_hostsファイルに追加するように要求しているためだと思いました。私が(目に見えて)これを求められるポイントはありません。

だから今、私は、テラフォームがknown_hostsをどのように処理するのか疑問に思います。リポジトリのクローンを作成し、known_hostsを探しましたが、何も見つかりませんでした。

4
Randy L

Terraformは、sshコマンドラインツールを実行せず、OpenSSHをライブラリとして使用しません。代わりに、Goで記述された代替のSSHクライアント実装を使用します。

デフォルトでは、このSSHクライアントはホスト検証を行わず、Terraformはこのデフォルトを上書きしません。したがって、sshとの最初の接続の場合のように、ホストIDを確認する必要はありません。このSSHクライアントライブラリはOpenSSH構成ファイルを考慮しないため、ホストチェックに関するオプションを設定しても効果はありません。

Terraformは、成功するかタイムアウトになるまで、リモートホストへの接続を繰り返し試行します。タイムアウトの一般的な原因は2つあります。

  • Terraformが実行されているホストからのTCPポート22)での接続を許可しないターゲットインスタンスのセキュリティグループルール。これは、新しいingressルールを1つに追加することで対処できます。インスタンスのセキュリティグループの。
  • Terraformは、セキュリティグループがプライベートを期待している場合、またはその逆の場合に、パブリックIPアドレスを使用しようとしています。 connectionブロック を使用して、Terraformに接続方法を指示できます。パブリックIPアドレスには${self.public_ip}を使用し、プライベートIPアドレスには${self.private_ip}を使用します。ここで、public_ipprivate_ipはどちらもaws_instanceリソースタイプの属性です。

TerraformがインスタンスのパブリックIPアドレスに接続する場合、セキュリティグループはTerraformが実行されているホストのpublicIPアドレスからのSSH接続を許可する必要があることに注意してください(実際にはNATゲートウェイ)のアドレスである可能性がありますが、プライベートIPアドレスに接続するには、セキュリティグループがTerraformホストのプライベートIP(EC2インスタンスで実行されていると仮定)またはEC2の外部からプライベートIPアドレスにトンネリングするために使用されているVPNゲートウェイの。

7
Martin Atkins

最も可能性が高いのは、次のsshオプションを使用していることです。

-o 'StrictHostKeyChecking no'

チェックをバイパスする方法です。答えよりもコメントとして追加したいのですが、できません

1
ignivs