web-dev-qa-db-ja.com

複数のgithubリポジトリで1つのsshキーを使用できないのはなぜですか?

Githubでホストしている2つのgitリポジトリの内容を設定する必要があるサーバーがあります。サーバーのsshキーをデプロイキーとしてgithubの両方のプロジェクトに追加したいと思います。

残念ながら、Key is already in useというエラーが表示されます。これは、 このgithubページ によると、複数のリポジトリにデプロイキーを追加できないためです。

私は本当に疑問に思います。なぜこれが問題なのですか? 1つのサーバーが複数のリポジトリにアクセスできないのはなぜですか?彼らがここで軽減しようとしているリスクは何ですか?

15
kramer65

これは、リンクしたGitHubページに表示されている内容の正しい特性ではありません。実際、can多くの異なるGitHubリポジトリに同じsshキーを使用します。できないことは、多くのリポジトリで1つのsshキーを使用することですand「デプロイキー」と呼ばれるものとして使用することも、を使用することもできません。/samessh key as someotheruser。

ここで起こっていることは、GitHubのsshサーバーが着信キーを次の2つのタイプのいずれかに分類することです。

  • アカウントキー。着信接続をyouとして認証します。次に、各リポジトリの「アクセス権を持つアカウント」設定によって制御される、いくつかの広い(または狭い)リポジトリの範囲に対する権限があります。つまり、キー自体は、あなたがkramer65(またはあなたのアカウント名が実際に存在するもの)であることを彼らがどのように知っているかです。
  • deploy key。これは、着信接続が1つの特定のリポジトリにアクセスできることを認証します。つまり、関係する「アカウント」はありません。1つの特定のリポジトリに接続された、1つのキーだけです。

「マシンユーザー」もいますが、それらはアカウントの一形態です。 GitHubがそれらを通常のアカウントキーと内部的に区別するかどうかさえわかりません。これらはデプロイキーのようなものではなくアカウントのようなものであるため、さまざまなリポジトリへのアクセスを許可できます。 (これはおそらくあなたが望むものです。)

私は本当に疑問に思います。なぜこれが問題なのですか? 1つのサーバーが複数のリポジトリにアクセスできないのはなぜですか?彼らがここで軽減しようとしているリスクは何ですか?

ここでは実際にはprotectedではありません。 GitHubに、この1つの追加キーを保存するだけで、(あなたの)便宜のために、アカウントを作成する手間をかけずに保存できます。 (彼らの)便宜のために、彼らはこの1つの追加キーを正確に1つのリポジトリに添付します。これにより、sshサーバー、または実際には、キーが認証された直後の「ログインシェル」が、許可された1つのリポジトリを検索できます。最初に「アカウント」テーブルを介して間接的にする必要はありません。着信キーがアカウント(またはマシンユーザー)キーである場合、それらのsshサーバー、またはそのすぐ後ろにあるものは、許可されたリポジトリのセットを見つけるために、このセカンダリテーブルを調べる必要があります。

詳細については、 https://developer.github.com/guides/managing-deploy-keys/#deploy-keys を参照してください。

automaticallyにデプロイキーを許可できなかった理論的な理由はありません。それ以外の場合は匿名の「マシンユーザー」を作成し、各リポジトリに自動的に追加したり、そこから削除したりします。ただし、マシンユーザーはすでに存在しているため、themは何も購入せず、これと同じ機能を実行します。セキュリティ機能としてスピンを試みることができます。 「ねえ、そのキーはすでに私にとって何かを意味している」とあなたに知らせるからです...しかし、あなたがそのキーを持っていて、supposedがそのキーを持っていない場合、あなたはこれで、その1つのキーが実際にロックを解除するものを見つけることができます。これは、セキュリティが多少低下します。一方、areがそのキーを持っているはずで、持っている場合ロックを解除するリポジトリを忘れただけで、システムが非常に困難になります。ただし、これはどのセキュリティシステムでも一般的です。安全性が高いほど、実際に使用するのが不便になります。)

13
torek