GitHubなどでレポジトリ毎にDeploy keysなどから鍵を登録し、 鍵を使ったアクセスをすることができる様に設定できますが、 このとき登録した鍵を使うと同じサーバーの他のパブリックレポジトリにもアクセスできる様になっていました。
Deploy keys
GitHubであれば各レポジトリのSettingsDeploy keysから 鍵を登録でき、その鍵を使ってsshプロトコルを使ったアクセスができる様になります。
Allow write accessにチェックすればcommitもできる様になります。
他のレポジトリへのアクセス
この様な鍵の登録はユーザーの登録した鍵とは別に レポジトリ毎に設定できるものですが、 ここでGitHubのあるレポジトリに登録した鍵を使って他のレポジトリをcloneしてみようとするとできてしまいました。
簡単に言うと通常のユーザーの鍵として登録してあるものと同じ様な権限を持った鍵になります。 (特定のユーザーとしての操作が出来ないだけでユーザーとして通常見えるものは見ることができる。)
起こりそうな問題
プライベートレポジトリはいずれにしろ駄目でパブリックレポジトリに関してだけなので、 GitHubであれば鍵がなくてもhttpプロトコルでアクセスできるし そもそもウェブで見れるのでそれほど問題はないかもしれません。
ただ、同じ様なことをプライベートに立てているGitLabサーバーや GitBucketサーバーでやってみてもやはりできてしまいました。
その様なプライベートサーバーがsshでのアクセスだけを許可する様にして パブリックレポジトリに関しても通常は外から見えないようにしている場合、 特定のレポジトリだけのためのREAD ONLY鍵を作ることはできません。
そういうことをしたい場合にはプライベートレポジトリをきちんと作るしかありません。
ただ、例えば、あるGitサーバーにユーザーアカウントを持っている人たちには 制限なく公開したいが、 加えて特定の鍵を使ってあるレポジトリだけ公開したい、ということは出来ません。
逆にこのことを知らずに鍵を登録してしまうとその鍵ですべてのパブリックレポジトリを見ることができる様になってしまいます。
この辺を知らずに、例えばRepositoryAとRepositoryBに同じ鍵を登録していて、 その鍵をうっかり漏らしてしまい破棄しようとしてRepositoryAから削除したとしても RepositoryBに登録がある限りRepositoryAも見れます。うっかり別のレポジトリに登録しているのを忘れると困ったことになります。
一方で鍵を使ってREAD ONLYなアクセスをしたい場合、 同じ鍵を使うのであれば複数のレポジトリに登録してもあまり意味がありません。
こういった仕様はサーバー側の設定で変更できるのかもしれませんが、 基本的に有名なGitサーバーのデフォルトでは1つのレポジトリに鍵を登録すると すべてのパブリックレポジトリを見ることができる様になるようです。
まとめ
GitHubなんかに関してはあまり重要性の無い仕様ですが、 自分でGitサーバーを立てている場合には結構きちんと気にしないといけない仕様だと思います。
そもそも各レポジトリ毎にREAD ONLYな鍵を登録できる様になっている事自体がおかしな話で、 こういう仕様であれば、もし仮に変更できないとかいうことであればさらに、 サーバー全体に対してREAD ONLYな鍵を登録する、削除する、みたいな項目があれば良くて、 レポジトリ毎にはWRITE権限のあるものだけを登録できる様にすれば良いはずです。
ちょっと謎な仕様ですが、常識なのか、それとも皆知らずに使っているのか(殆どの場合はあまり関係ない話かもしれませんが)、疑問。