※ 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_rsanekoha_rsa.pubの2つが作成されているはずです。

gitlab に新しい公開鍵を登録する

gitlab のアカウント → 設定

アカウント→設定

左側のメニューから、ssh 鍵を選択

ssh鍵へ移動

作成した pub ファイルの中身をコピペ

*.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 が今回登録した特別なホスト名です。
HostNamegitlab.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 編)をどうぞ。