gitlabに新プロジェクトをpushできなくて困った話(ssh編)
※ ssh 接続が対象です。https 接続でユーザを使い分ける場合はgitlab に新プロジェクトを push できなくて困った話(https 編)を参照。
新プロジェクトを作ったけど push できない!
ってなことがありまして。
- gitlab にプロジェクト作成
- ローカルの
git init
済みのプロジェクトを push
いつもならすんなり終わるこのルーチンでエラーになって困りましたっていうお話。
以下の対応策をお試しの場合はアカウント名
とプロジェクト名
は適宜置き換えてください。
いつものコマンド
毎度のことながら、gitlab に載っている通りのをコピペ。
cd <プロジェクト名>
git init
git remote add origin git@gitlab.com:<アカウント名>/<プロジェクト名>.git
git add .
git commit -m "Initial commit"
git push -u origin master
push できない!
最後にこんなのが出た。
git@gitlab.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Google さんで直訳するとこう。
「許可が拒否されました(公開鍵)。
致命的:リモートリポジトリから読み取ることができませんでした。
正しいアクセス権があることを確認してください
リポジトリが存在します。」
ssh 公開鍵が不正なのでアクセスできない、ということ。
原因は、1 つのgitlab
に対して複数ユーザを使い分けているので、ssh キーを使い分けなければいけないため。
.ssh/config
で使うユーザ分登録します。
ssh 公開鍵を新しく用意する
gitlab
では異なるユーザが同じ公開鍵を登録することは出来ません。
なので、まずはユーザ専用の公開鍵を作成します。
# パスワード込みのワンライナーならこんな感じ
ssh-keygen -b 4096 -q -f ~/.ssh/nekoha_rsa -N <パスワード>
以上で鍵の作成は完了です。
~/.ssh
ディレクトリに <アカウント名>
ファイルと<アカウント名>.pub
ファイルが作成されていることを確認しましょう。
上記の例ならnekoha_rsa
とnekoha_rsa.pub
の2つが作成されているはずです。
gitlab に新しい公開鍵を登録する
gitlab のアカウント → 設定
左側のメニューから、ssh 鍵を選択
作成した pub ファイルの中身をコピペ
*.pub
ファイルをテキストエディタで開き、コピペします。
無印ファイルの方は秘密鍵なので登録しないように!
.ssh/config の編集
~/.ssh/config
を編集します。
Linux 系、Windows10 とも同じ場所にあります。なければ作る。
Windows の場合ユーザフォルダ内に隠しフォルダとして存在するので、隠しフォルダも表示するようにしてください。
エクスプローラでユーザフォルダを開き、アドレスバーに \.ssh
を追加してもアクセスできます。
gitlab
のホスト名に使いたいユーザ名をくっつけて登録します。
このルールでなくても良いですが、増やすときに同じルールにしておきましょう。
# nekoha_rsaでのサンプル
Host gitlab.com.nekoha
HostName gitlab.com
IdentityFile ~/.ssh/nekoha_rsa
gitlab.com.nekoha
が今回登録した特別なホスト名です。
HostName
でgitlab.com
を指定、IdentityFile
で使いたい公開鍵のパスを指定します。
この様に登録すると、gitlab.com.nekoha
のホスト名にアクセスするときにユーザnekoha
とホスト名 gitlab.com
が使われます。
git push に再挑戦
先程、リモートリポジトリはgitlab.com
で登録してしまいました。
git remote add origin git@gitlab.com:<アカウント名>/<プロジェクト名>.git
まずはこれを消し、新しいホスト名gitlab.com.nekoha
に変更します。
git remote remove origin
git remote add origin git@gitlab.com.nekoha:<アカウント名>/<プロジェクト名>.git
あとはいつものように push するだけ。
先程の設定が生きていれば、gitlab.com.nekoha
はホスト名gitlab.com
に読み替えられ、設定済みのユーザで接続しにいきます。
git push -u origin master
パスワードを求められるので、正しいパスワードを入力できたら push に成功です!
おすすめは https
ここまでやっといてなんですが、おすすめは https 接続です。
Windows だと ssh 接続のたびにパスワード聞かれてめんどくさいので。
https の場合はgitlab に新プロジェクトを push できなくて困った話(https 編)をどうぞ。