Known_hostsにIP範囲を追加するには?

Known_hostsにIP範囲を追加するには?

GitHubのような多くのサービスは広範なIPを使用し、明らかに同じ公開鍵を使用しています。

Known_hostsファイルにIP範囲(できるだけ単一の範囲)を追加するにはどうすればよいですか?

GitHub サンプルの場合は、次の範囲を使用します。

  • 207.97.227.224/27
  • 173.203.140.192/27
  • 204.232.175.64/27
  • 72.4.117.96/27
  • 192.30.252.0/22

鍵は次のとおりです。

AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIckr6pLlVDBfOLX9QsyCOV0wzfjj TYP 81eF zLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+J2 3 GHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

答え1

他の回答で指摘したように、既知のホストIPアドレス範囲はサポートされていません。ただし、ワイルドカードはサポートしています。もちろん、ワイルドカードはまったく同じではないので、IPアドレスに使用するときは非常に注意する必要がありますが、GitHubの特別な場合には安全に使用できます。

この質問を受けて以来、状況がより簡単になったようです。 ~によるとGitHubの公式ドキュメント1つのIPアドレス範囲のみを使用してください(少なくともIPv4に関する限り)。 192.30.252.0/22の範囲です。これにより、1020個の可能なIPアドレスを4つの異なるCブロック内の最後のオクテットの全可能範囲に便利に含めることができます。

man 8 sshd、これは私たちが処理する必要があります既知のホスト:

Hostnamesコンマで区切られたパターンのリスト(ワイルドカードの役割)*?各パターンは、標準ホスト名(クライアント認証時)またはユーザー提供名(サーバー認証時)と一致します。否定を示すためにパターンの前に貼り付けることもできます!。ホスト名が否定パターンと一致する場合、その行の他のパタ​​ーンと一致しても(その行では)許可されません。ホスト名またはアドレスはオプションで角括弧で囲むことができ、その後[に非標準ポート番号が続くことがあります。]:

この情報を使用して、*すべての可能なGitHubエンドポイントに一致する項目を設定できます。ただこれらのエンドポイント)は次のようになります。

github.com,192.30.252.*,192.30.253.*,192.30.254.*,192.30.255.* ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

構築する必要があるIP範囲にCブロック全体が満たされていない場合(したがって、可能なすべてのオクテット値)、ワイルドカードを使用して正確な一致を得ることはできません。

答え2

スコープを簡単に追加することはできないようですが(今はテストできません)、.ssh/ssh_configに以下を追加して同じ効果が得られると思います。

Host *.github.com
HostKeyAlias github-server-pool.github.com

次に、github-server-pool.github.comという名前でKnown_hostsファイルにキーを追加できます。

前提:ホストgithub-server-pool.github.comが存在しないか、SSH経由で接続されていません。

その背後にあるアイデアは、sshがgithub.comドメイン内のすべてのホストの公開ホストキーを見つけるためのキーとしてgithub-server-pool.github.comキーを使用することです。

答え3

IPアドレスセットはファイルではサポートされていませんknown_hosts。各アドレスには1行が必要です。

エントリのホスト名部分はデフォルトでハッシュされていますが、これはプライバシーのためのものであるため、あなたを捕まえた人はあなたがどの.known_hostsホストに接続したのかを簡単に理解することはできません。 (彼らはまだ推測を確認できます。)一般的なホスト名またはIPアドレスを使用できます。

for net in 207.97.227.224/27 173.203.140.192/27 204.232.175.64/27 72.4.117.96/27 192.30.252.0/24 192.30.252.1/24 192.30.252.2/24 192.30.252.3/24; do
  base=${net%/*}; d=${base##*.}; abc=${base%.*}
  bits=$((32 - ${net#*/}))
  e=0
  while [ $e -lt $((2 ** bits) ]; do
    echo "$abc.$((d + e)) ssh-rsa AAAAB3NzaC1yc…" >>~/.ssh/known_hosts
    e=$((e + 1))
  done
done

これにより重複が追加される可能性があります。

答え4

github_known_hostsGitHubによって公開されたIPアドレス範囲を拡張する小さなRubyスクリプトを作成しました。メタAPIエンドポイントhttps://api.github.com/meta)。

#!/usr/bin/env ruby

require "ipaddr"
require "json"

pubkey = "AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=="
ips    = JSON.parse(STDIN.read)["git"].flat_map { |net| IPAddr.new(net.chomp).to_range.map(&:to_s) }

puts "github.com,gist.github.com,#{ips.join(',')} ssh-rsa #{pubkey}"

次のように使用すると、ファイルに貼り付けることができる長い行が生成されます~/.ssh/known_hosts

curl --silent https://api.github.com/meta | github_known_hosts >> ~/.ssh/known_hosts

関連情報