0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

サークルの共同サーバから、GitHubの特定のリポジトリにだけSSHアクセスできるようにしたい

Last updated at Posted at 2024-07-03

この記事では、読書者の方がある程度SSHの設定ができる想定で書いています。SSHについて分からない場合はGitHubへのSSH鍵の登録方法などを、別の記事で参照してください🙇

先にまとめ

GitHubのデプロイキーという機能を用いてリポジトリ専用のキーペアを作成し、それをサーバに登録しておいてSSH接続するようにしました。

背景

私の所属しているサークルでは、部員が比較的自由にいじることのできる共用サーバがあります。このサーバは管理が完全に学生によるものであるため、特に部長やインフラの管理をしている学生はsudo権限のような強い権限を持っています。

このサーバ内で例えばGitHubにSSH接続をするために、公開鍵認証のキーペアを生成すると、ファイルの権限を適切に設定していても他のsudo権限を持つユーザから個人の秘密鍵が閲覧できてしまうという状況でした。1

基本的にサークルのサーバに置いているのは、サークルとして開発しているプロダクトが主であり、それらのプログラムが他のサークルメンバーから閲覧できる分には問題はありません。一方で秘密鍵が閲覧できてしまうと、対応する公開鍵をGitHubに登録しているユーザ個人の非公開リポジトリや、別のorganizationの非公開リポジトリをいじることができてしまいます。

サークルメンバーとの信頼関係を信じて秘密鍵を置くというのもありましたが、万が一のことも考えてそれ以外の対応法を検討していました。

対応策

私の中で考えられた対応策は次のようなものがありました。

  • アクセストークンを利用してHTTPS認証をする
  • デプロイキーを利用する

このうち、私は「デプロイキーを使用する」という方法を利用することにしました。

普段からGitHubへの接続にはSSH認証を利用していて慣れており、デプロイキーであればSSH認証と似た形で設定ができたためです。

デプロイキーの場合でもキーペアを生成して秘密鍵をホームディレクトリ内に置いておく必要があり、他ユーザからそれを見られる心配はあります。ただ、万が一見られた場合でも、その秘密鍵では紐づいている1つのリポジトリしか操作ができず、任意の非公開リポジトリの操作は行えません。ですので、サークルのプロダクトを共用サーバ内で扱う分には問題がないだろうということになりました。

実際にデプロイキーを設定してみる

まずはサーバ内でキーペアを生成します。

ssh-keygen -f demo_key

GitHub上で先ほど生成した公開鍵をデプロイキーに設定します。デプロイキーはリポジトリの設定画面から、赤枠の箇所で追加できます。

デプロイキーの設定

この枠に公開鍵を入力します。コミットやプッシュをする場合は下にあるAllow write accessというチェックボックスにチェックを入れないと、書き込みができません。

share-server-github-2.png

そうしたら、参考の記事にある通り、複数のリポジトリをいじるための設定を~/.ssh/configに記述しておきます。

~/.ssh/config
Host demo-repo
  HostName github.com
  User git
  IdentityFile ~/.ssh/demo_key

そして最後に、以下のコマンドでデプロイキーを設定したリポジトリをクローンしてこれればOKです。

git clone git@demo-repo:組織名/リポジトリ名.git

追加でリポジトリを設定する際には、新しくキーペアを生成し、ホスト名を変えてクローンしてください。普段のクローン時とは以下の部分が異なっています。ここを、.ssh/configに設定したホスト名にします。

+ git clone git@demo-repo:組織名/リポジトリ名.git
- git clone git@github.com:組織名/リポジトリ名.git

参考

  1. そもそもsudo権限を持つなという話かもしれませんが、サークルの活動としてそこは一旦大目に見ることにしていました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0