gitlabに新プロジェクトをpushできなくて困った話(ssh編)
create: 2019-12-24
git gitlab

※ 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では異なるユーザが同じ公開鍵を登録することは出来ません。
なので、まずはユーザ専用の公開鍵を作成します。

cd ~/.ssh
ssh-keygen -f <アカウント名>

.sshディレクトリに移動し、<アカウント名> という名前で公開鍵を作成します。
パスワード入力を求められるので入力ます。

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): ← パスワードを入力
Enter same passphrase again: ← パスワードを入力
Your identification has been saved in <アカウント名>.
Your public key has been saved in <アカウント名>.pub.
The key fingerprint is:
SHA256:ji9gQbjxAiZcbl5TfdPuMUEs5pQK9YlSSg4G75zniDk yoshi@RYZEN5-2019
The key's randomart image is:
+---[RSA 2048]----+
|. .+.o ooo  =.   |
|oo+ + =.o.oB.+   |
|o. B + +..*o+ .  |
|  = * o .. . +   |
|   o = .S   . o  |
|    = +o     .   |
|   E o...        |
|    . ..         |
|       ..        |
+----[SHA256]-----+

以上で鍵の作成は完了です。

~/.sshディレクトリに <アカウント名>ファイルと<アカウント名>.pubファイルが作成されていることを確認しましょう。

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

gitlab のアカウント → 設定

アカウント→設定

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

ssh鍵へ移動

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

*.pub ファイルをテキストエディタで開き、コピペします。
無印ファイルの方は秘密鍵なので登録しないように!
pubファイルをコピペ

.ssh/config の編集

~/.ssh/config を編集します。
Linux 系、Windows10 とも同じ場所にあります。なければ作る。

Windows の場合ユーザフォルダ内に隠しフォルダとして存在するので、隠しフォルダも表示するようにしてください。
エクスプローラでユーザフォルダを開き、アドレスバーに \.sshを追加してもアクセスできます。

gitlabのホスト名に使いたいユーザ名をくっつけて登録します。
このルールでなくても良いですが、増やすときに同じルールにしておきましょう。

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host gitlab.com.<アカウント名>
    HostName gitlab.com
    IdentityFile ~/.ssh/<アカウント名>

gitlab.com.<アカウント名> が今回登録した特別なホスト名です。
HostNamegitlab.comを指定、IdentityFileで使いたい公開鍵のパスを指定します。

この様に登録すると、gitlab.com.<アカウント名> のホスト名にアクセスするときにユーザ<アカウント名>とホスト名 gitlab.comが使われます。

git push に再挑戦

先程、リモートリポジトリはgitlab.comで登録してしまいました。

git remote add origin git@gitlab.com:<アカウント名>/<プロジェクト名>.git

まずはこれを消し、新しいホスト名gitlab.com.<アカウント名>に変更します。

git remote remove origin
git remote add origin git@gitlab.com.<アカウント名>:<アカウント名>/<プロジェクト名>.git

あとはいつものように push するだけ。
先程の設定が生きていれば、gitlab.com.<アカウント名>はホスト名gitlab.comに読み替えられ、設定済みのユーザで接続しにいきます。

git push -u origin master

パスワードを求められるので、正しいパスワードを入力できたら push に成功です!

おすすめは https

ここまでやっといてなんですが、おすすめは https 接続です。
Windows だと ssh 接続のたびにパスワード聞かれてめんどくさいので。

https の場合はgitlab に新プロジェクトを push できなくて困った話(https 編)をどうぞ。