最初に
42Tokyoの課題をGitHubで管理している人は多いと思う。
この記事では、自分のPCからGitHubと42TokyoのvogsphereへSSH接続する設定と、校舎端末でGitHubへ接続する場合の設定例を残しておく。
前提
SSH接続で使う鍵は、基本的に環境ごと・用途ごとに分ける。
自分のPCでは、以下のようにGitHub用と42Tokyo用の鍵を分けている。
~/.ssh/
├── github # GitHub用の秘密鍵
├── github.pub # GitHub用の公開鍵
├── 42tokyo # 42Tokyo/vogsphere用の秘密鍵
├── 42tokyo.pub # 42Tokyo/vogsphere用の公開鍵
└── config秘密鍵であるgithubや42tokyoは絶対にpushしないし、人に送らない。
GitHubやintraに登録するのは、.pubで終わる公開鍵だけである。
自分のPCでGitHub用の鍵を作る
まだGitHub用のSSH鍵がない場合は、まず自分のPCで鍵を作る。
ssh-keygen -t ed25519 -f ~/.ssh/github| オプション | 意味 |
|---|---|
-t ed25519 |
作成する鍵の種類をED25519にする |
-f ~/.ssh/github |
保存先のファイル名を~/.ssh/githubにする |
作成後、権限を設定する。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/github
chmod 600 ~/.ssh/github.pubSSHは秘密鍵の権限が緩いと、その鍵を安全でないものとして無視することがある。
そのため、~/.sshは自分だけが入れるように700、秘密鍵は自分だけが読めるように600にする。
公開鍵は秘密ではないため644でも大きな問題にはなりにくいが、他人から読める必要もないので600にしておけばよい。
この挙動はOpenSSHのssh(1)のman pageにも記載されており、秘密鍵はユーザー本人だけが読めるべきで、他ユーザーからアクセス可能な秘密鍵ファイルはsshが無視すると説明されている。
ssh(1) - Linux manual page

公開鍵を表示する。
cat ~/.ssh/github.pub表示された内容をGitHubのSSH keysに登録する。
GitHubでは、Settings -> SSH and GPG keys -> New SSH keyから登録できる。
登録後、接続確認をする。
ssh -T git@github.com| オプション | 意味 |
|---|---|
-T |
疑似端末を割り当てず、接続確認用の通信だけを行う |
git@github.com |
github.comへgitユーザーとして接続する |
成功すれば、GitHubのユーザー名が表示される。
Hi <ユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.自分のPCに42Tokyo用の鍵を持ってくる
42Tokyo/vogsphere用の鍵は、自分のPCで新しく作るのではなく、校舎端末側にある秘密鍵を自分のPCへ持ってくる。
理由は、Piscine中に校舎端末でSSH鍵を作成し、その公開鍵をintraに登録してvogsphereを使える状態にしていたためである。 intraに登録できるSSH鍵は1つのみなので、自分のPC用に別の42Tokyo鍵を新しく作って登録し直すのではなく、すでに登録済みの鍵に対応する秘密鍵を自分のPCでも使うことにした。
持ってくる方法は、校舎端末と自分のPCの状況に合わせる。 方法はいくつかあるが、USBメモリを使うのが一番安全かと思う。秘密鍵なのでSlackやDiscordなどに貼ったり、GitHubへpushしたりは絶対にしない。
自分のPCでは、持ってきた秘密鍵を~/.ssh/42tokyoとして置く。
mv /path/to/42tokyo ~/.ssh/42tokyo権限を設定する。
chmod 600 ~/.ssh/42tokyoGitHub用の鍵と同じく、秘密鍵である42tokyoは自分だけが読める600にしておく。
秘密鍵から公開鍵を作る。
ssh-keygen -y -f ~/.ssh/42tokyo > ~/.ssh/42tokyo.pub
chmod 600 ~/.ssh/42tokyo.pub| オプション | 意味 |
|---|---|
-y |
秘密鍵から公開鍵を出力する |
-f ~/.ssh/42tokyo |
読み込む秘密鍵を指定する |
> ~/.ssh/42tokyo.pub |
出力された公開鍵を~/.ssh/42tokyo.pubに保存する |
ssh-keygen -yは、秘密鍵から対応する公開鍵を出力するコマンドである。
公開鍵である42tokyo.pubも、他ユーザーから読める必要はないので600にしておく。
公開鍵を表示する。
cat ~/.ssh/42tokyo.pub表示された公開鍵が、intraに登録済みのSSH keyと一致しているか確認する。 まだ登録していない場合は、42Tokyo側で指定されている場所にこの公開鍵を登録する。
自分のPCのSSH config
鍵を分けている場合、~/.ssh/configにどの接続先でどの鍵を使うかを書いておくと扱いやすい。
自分のPCでは、だいたい以下の形にしている。
Host github github.com
HostName github.com
User git
IdentityFile ~/.ssh/github
Host vogsphere-v2.42tokyo.jp
HostName vogsphere-v2.42tokyo.jp
User git
IdentityFile ~/.ssh/42tokyo
IdentitiesOnly yesポイントは、GitHub用とvogsphere用でIdentityFileを分けること。
IdentitiesOnly yesを付けておくと、そのHostでは指定した鍵だけを使うようになる。
複数のSSH鍵を持っている場合、意図しない鍵を順番に試して認証に失敗することがあるので、vogsphere側には付けておく方がわかりやすい。
設定ファイル自体の権限も整えておく。
chmod 600 ~/.ssh/config~/.ssh/configには、どの接続先でどの鍵を使うかが書かれている。
秘密鍵そのものではないが、SSH設定として自分だけが読める状態にしておく。
自分のPCからvogsphereへ接続するときの注意
自分のPCからvogsphereへSSH接続する場合、鍵の設定だけでは足りない。
42Tokyoのvogsphereは、通常どこからでも接続できるものではない。 自分が確認した範囲では、自分のPCで校舎内Wi-Fiに接続しているとき、または校舎端末から作業しているときに接続する前提で考えるのがよさそうだった。
接続確認は以下で行う。
ssh -T git@vogsphere-v2.42tokyo.jp| オプション | 意味 |
|---|---|
-T |
疑似端末を割り当てず、接続確認用の通信だけを行う |
git@vogsphere-v2.42tokyo.jp |
vogsphereへgitユーザーとして接続する |
Gitのremoteには、intraから払い出されたvogsphereのURLを追加する。
git remote add 42_v1 git@vogsphere-v2.42tokyo.jp:xxxxx
git push 42_v1 mainxxxxxの部分は課題ごとに払い出されるURLに置き換える。
GitHubは普段の作業用、vogsphereは提出用として分けておくと扱いやすい。
git remote -v例としては以下のようになる。
origin git@github.com:yourname/project.git (fetch)
origin git@github.com:yourname/project.git (push)
42_v1 git@vogsphere-v2.42tokyo.jp:xxxxx (fetch)
42_v1 git@vogsphere-v2.42tokyo.jp:xxxxx (push)校舎端末でGitHubへ接続する場合
校舎端末でもGitHubへpush/pullしたい場合がある。
このとき、自分のPCの秘密鍵を校舎端末へコピーするのは避けた方がよい。 校舎端末では、校舎端末用の鍵を新しく作り、その公開鍵だけをGitHubに追加する。
ssh-keygen -t ed25519 -f ~/.ssh/github_42tokyo| オプション | 意味 |
|---|---|
-t ed25519 |
作成する鍵の種類をED25519にする |
-f ~/.ssh/github_42tokyo |
保存先のファイル名を~/.ssh/github_42tokyoにする |
権限を設定する。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/github_42tokyo
chmod 600 ~/.ssh/github_42tokyo.pub校舎端末でも理由は同じである。 秘密鍵はその端末上の自分だけが読めるようにし、GitHubへ登録する公開鍵だけを外に出す。
公開鍵を表示する。
cat ~/.ssh/github_42tokyo.pubこの公開鍵をGitHubのSSH keysに登録する。
Titleは、後から消しやすいように42Tokyo campusなどにしておくとよい。
校舎端末側の~/.ssh/configは以下のようにする。
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_42tokyo
IdentitiesOnly yes接続確認をする。
ssh -T git@github.com| オプション | 意味 |
|---|---|
-T |
疑似端末を割り当てず、接続確認用の通信だけを行う |
git@github.com |
github.comへgitユーザーとして接続する |
GitHubのリポジトリはSSH URLでcloneする。
git clone git@github.com:yourname/project.gitすでにHTTPSでcloneしている場合は、remote URLをSSHに変更する。
git remote set-url origin git@github.com:yourname/project.git校舎端末でvogsphereへ提出する場合
校舎端末からvogsphereへpushする場合も、基本は同じである。
Piscine中に設定したとは思うが、42Tokyo用の鍵がまだなければ、まず校舎端末上で作る。
ssh-keygen -t ed25519 -f ~/.ssh/42tokyo| オプション | 意味 |
|---|---|
-t ed25519 |
作成する鍵の種類をED25519にする |
-f ~/.ssh/42tokyo |
保存先のファイル名を~/.ssh/42tokyoにする |
この秘密鍵を後で自分のPCに持ってくる場合も、持ち出すのは~/.ssh/42tokyoである。
秘密鍵なので、共有チャットやGitHub経由では扱わない。
公開鍵は、校舎端末上でそのまま表示してもよいし、自分のPCへ秘密鍵を持ってきた後にssh-keygen -yで作り直してもよい。
cat ~/.ssh/42tokyo.pub~/.ssh/configにvogsphere用の設定を追加する。
Host vogsphere-v2.42tokyo.jp
HostName vogsphere-v2.42tokyo.jp
User git
IdentityFile ~/.ssh/42tokyo
IdentitiesOnly yes提出用remoteを追加してpushする。
git remote add 42_v1 git@vogsphere-v2.42tokyo.jp:xxxxx
git push 42_v1 mainトラブルシュート
Permission deniedが出る
まず、どの鍵を使おうとしているか確認する。
ssh -vT git@github.com
ssh -vT git@vogsphere-v2.42tokyo.jp| オプション | 意味 |
|---|---|
-v |
詳細ログを表示する |
-T |
疑似端末を割り当てず、接続確認用の通信だけを行う |
出力の中にOffering public keyという行が出る。
そこで想定した鍵が使われていなければ、~/.ssh/configのIdentityFileやHostの指定を見直す。
鍵の権限で怒られる
SSHは秘密鍵の権限が緩いと使ってくれない。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/github
chmod 600 ~/.ssh/42tokyo校舎端末で別名の秘密鍵を作った場合は、そのファイルにもchmod 600を設定する。
GitHubには繋がるがvogsphereに繋がらない
GitHubとvogsphereは別物なので、GitHubにSSHできてもvogsphereにSSHできるとは限らない。
確認する点は以下。
- vogsphere用の公開鍵を42Tokyo側に登録しているか
~/.ssh/configでvogsphere用の鍵を指定しているか- 校舎内Wi-Fi、または校舎端末から接続しているか
- intraから払い出されたremote URLを正しく使っているか
特にネットワーク制限は鍵設定だけでは解決できない。必ず校舎内ネットワークで試す。
まとめ
この記事では、自分のPCと校舎端末でGitHubやvogsphereにSSH接続するための鍵の作り方、配置、~/.ssh/configの設定を整理した。
ポイントは、GitHub用とvogsphere用の鍵を分け、どの接続先でどの秘密鍵を使うのかを明示しておくこと。また、vogsphereは鍵の設定だけでなく、校舎内ネットワークから接続していることが必須になる。
接続できないときは、鍵、SSH config、接続元のどこで詰まっているのかを順番に確認すると原因を追いやすい。