Githubにssh接続するとき、つまづくポイント

2021年9月22日

github

Githubにアカウントを作る。
そしてリポジトリも作った。あとはcloneやpushをしていくだけ。
接続するにはhttp接続か、ssh接続を選択することが可能。

https接続はgithubのIDとパスワードがわかればどの端末からでもアクセスできてしまう。
ssh接続は公開鍵、秘密鍵の仕組みから、限られた端末からしかアクセスできないようにできる。

よりセキュアに開発するためにはSSH接続を採用するべきだろう。

公開鍵と秘密鍵

・公開鍵とは暗号化するために使う
・秘密鍵は複合するために使う

公開鍵は中身がバレてもそれほど影響はないため、Githubには公開鍵を登録しておく。
Githubに限らず、XserverやBacklogといったSSH接続をする場合はサーバ側に公開鍵を登録する。
秘密鍵は絶対に外に置かないこと。自分の端末内(一般的には./sshとか)に置いておく。

公開鍵と秘密鍵を作る

作り方の参考例は色々なサイトに存在するので詳しくは記載しない。

作業場所に移動(存在しない場合はmkdir ~/.sshでディレクトリを作る)

cd ~/.ssh

鍵を作る

ssh-keygen -t rsa
Enter file in which to save the key (/Users/xxxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): (パスフレーズを入力)
Enter same passphrase again: (もう一度入力)

デフォルトで進めるとid_rsa(秘密鍵)とid_rsa.pub(公開鍵)ができていることが確認できる
※lsコマンドで確認しておく

catコマンドでid_rsa.pubの中身を見て文字列をコピペしておくのも良いけど、pbcopyコマンド使えばクリップボードに保存してくれるから便利

pbcopy < id_rsa.pub

Githubに公開鍵を登録

Githubのユーザアイコンから「Settings」を選択

github settings

「SSH and GPG keys」を選択して「New SSH Key」ボタンを押下

SSH and GPG keys

titleにわかりやすい名前を記述して、Keyに先程コピーしたid_rsa.pubの内容をペーストする。

Add SSH key

これでGithubの設定は完了。

実際にGitリポジトリに接続

ここまで設定が完了すればSourceTreeなどのGit管理ツールから実際にcloneすれば良いのだが、
すんなり接続できるケースは少ない。

なので疎通確認をコマンドでしておく。

ssh -T git@github.com

疎通結果が確認できるのと同時に、これをやっておかないとSourceTreeで疎通ができなかったりする。
(おそらくはsshしておくことでknown hostsに登録され、SourceTreeはデフォルでそこを見てるのかもしれない)

configファイルに接続情報を登録する

gitの接続情報は~/.ssh/configに書いておく

Host github.com.main
    HostName github.com
    User username
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

Host github.com.sub
    HostName github.com
    User username
    IdentityFile ~/.ssh/id_rsa_sub
    IdentitiesOnly yes

この例はgithubアカウントを2つ持っている場合の例。
HostNameはgithub.comにしておき、Hostを別々の名前にしておくのがポイント。
Gitに接続する際、GitはconfigのHostを順に参照していると思われる。書いておくと便利。

2021.09.22 追記

複数のgithubアカウントを使う場合は
IdentitiesOnly yes
これを絶対に設定しておくこと。
IdentitiesOnlyを指定していない場合はデフォルトのnoが設定される。

IdentitiesOnly
yes: configファイルに指定されたキーファイルのみ使用するかの設定
no: すべての秘密鍵をためそうとする。そのため、意図したgithubアカウントに接続ができないことがある。(ハマる)

Githubのアカウントが複数の場合のcloneのやり方

例えば、以下のgitのURLがあるとする。

git@github.com:hoge-org/hoge-pj.git

これがメインの方のアカウントであれば疎通URLは

git@github.com.main:hoge-org/hoge-pj.git

サブであれば

git@github.com.sub:hoge-org/hoge-pj.git

とする。これができるのは↑のconfigファイルでHostを定義しているから。

プライベートと仕事用でGithubアカウントを分けてる人なんかは良いかも。
意外にも情報が少なくてハマったポイント。

まとめ

どこで誰と、どんなプロジェクトでアサインされようと今はGitがあたりまえに導入されている。

5年前くらいだとまだGitを使ってないプロジェクトも多くあったけど、今では常識になってしまってる。

必ずしも複数人での開発でなくても、個人でもソース管理をするためにGitは役に立つ。

なので週末とかでも個人アカウントを作ってGitの一通りのコマンドは試してみたりして知見を深めておくことは重要だろうな。