この記事では、読書者の方がある程度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
というチェックボックスにチェックを入れないと、書き込みができません。
そうしたら、参考の記事にある通り、複数のリポジトリをいじるための設定を~/.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
参考
-
そもそもsudo権限を持つなという話かもしれませんが、サークルの活動としてそこは一旦大目に見ることにしていました。 ↩