プライベートでも開発をしたりしていると、会社とプライベートで GitHub などのアカウントを使い分けたくなります。ぼくは結構プライベートアカウントで仕事の開発もしてしまっていたんですが、あまりよくないので、重い腰を上げてユーザを切り変えることにしました。SSH でアクセスしているので SSH の鍵をリポジトリ事に替えることがゴールです。
実は GitHub でそれをやる記事は既にたくさんあって、 GitLab であってもやり方は GitHub と別に変わらない ですけれど、こういう記事はなんぼあってもいいですからね。
キーを作成して両方に配置
SSH のキーペアを作って、公開鍵を GitLab に登録します(キーの作り方とか形式がいろいろありますが、今回は pem で置きました)。
ローカルに秘密鍵をおく
秘密鍵はローカルに置きます。WSL を使っているひとは(ぼくですが)、Windows のユーザホームと WSL のユーザホームと違うところにあるので間違えないようにしましょう。ただコピーして置いただけだとパーミションがゆるゆるなので
Permissions 0644 for 'sample_key.pem' are too open.
みたいにおこられます。なので、
chmod 600 ~/.ssh/sample_key.pem
しておきましょう。
GitLab に公開鍵をおく
設定は、ユーザ設定のここです。
上のキーの所に ssh-rsa とかではじまる公開鍵を登録します。「-----BEGIN PUBLIC KEY-----」みたいなヘッダ付きのフォーマット(このへんがよくわかってないが、ssh-rsa ではじまるのは OPENSSH の形式の一つ……で良いのかな……)は読んでくれません。読んでくれても良いのにね。
リポジトリごとの設定を作成
~/.ssh/config を編集します。
Host gitlab-main
HostName gitlab.com
User git
IdentityFile ~/.ssh/key_main.pem
TCPKeepAlive yes
IdentitiesOnly yes
Host gitlab-sub
HostName gitlab.com
User git
IdentityFile ~/.ssh/key_sub.pem
TCPKeepAlive yes
IdentitiesOnly yes
GitLab のリモートURLって(GitHubもそうですが)こういう形式していると思いますが、これ謎だったんですよね。
git@gitlab.com:[group-name]/[repository-name].git
git@gitlab.com ってなんだ? gitじゃなくて自分のユーザ名じゃ無くて良いのか、と思ってたんですが、git が便宜的にユーザ名になっているので普通に正しいみたいですね。ここはいまだにどういう理屈でこうなってるのかよくわかりません。
で gitlab.com のところは、ホスト名で、実際のホスト名というかホスト設定名がきます。なので上の設定だと
git@gitlab-sub:[group-name]/[repository-name].git
こうなるようです。すでにクローンしてしまってるリポジトリであれば、リモートリポジトリのURLを変更しましょう。
ユーザをリポジトリ事に設定
さいごに、このリポジトリアクセス時に使うユーザ名をリポジトリに設定します。これはこれで必要みたいですね。リポジトリのルートでやりましょう。
git config --local user.name [user-name]
git config --local user.email [user-mail-address]