もうusername, password は使用しない! githubに ssh で push する

Feb 5th, 2022
image

terminal からgit pushしようとしたら認証まわりでハマってしまったのでメモ。 しばらく gitkraken の gui で管理していたので気づきませんでした。 今回は、username、password、もしくは token を入力することなくgit push origin master 等の command で git push できるようにします。

TL;DR

https で git remote を登録すると毎回 username, password or token を追加する必要があるので面倒くさい。 ssh で git remote を登録すると ssh key の設定ができていればgit pushだけで済ますことができるので楽。

ssh key を作成

まず、秘密鍵と公開鍵のペアを作成します。 最初の file 名 入力のところをgithubにすることで秘密鍵githubと公開鍵github.pubが作成されます。 秘密鍵は local で保存、公開鍵は接続先に登録して、ssh 接続が可能になるという寸法です。 秘密鍵の permission は 600 に設定します。

shell
cd ~/.ssh
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): github
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in github.
Your public key has been saved in github.pub.
chmod 600 github

~/.ssh/config に作成した private key を追加

先ほど作成した秘密鍵を ssh の config に追加。これをすることで、ssh github.comと terminal に打つだけで ssh 接続できるようになります。

vim ~/.ssh/config

shell
Host github.com
HostName github.com
User git
Port 22 # defaultの人は不要
IdentityFile ~/.ssh/github.key

嵌まりポイント

  • HostName: remote url に登録する domain 名 と一致させる必要あり。今回の例では、github.com ではなく github だけだと git push が通らないので注意が必要です。
  • Port: /etc/ssh/ssh_configで default の Port 22 以外に設定している場合、Port を明示させる必要があります。github が ssh で受け付けている Port は 22 です。それ以外の Port で接続しようとしても弾かれてしまいます。
  • Firewall: 使用するパソコンで ufw, iptable 等の firewall を使用している場合、 Port 22 を空けときましょう。

github に public key を登録

github のSettingsから New SSH key を click して公開鍵を登録します。 ~/.ssh/github.pubの中身をここに貼り付けましょう。

git remote で repository 追加

git で管理されている repository 内で remote url を登録します。 remote url が https だと下記のような url が表示されます。

shell
git remote --verbose
origin https://github.com/repository.git (fetch)
origin https://github.com/repository.git (push)

remote url を ssh に変更します。

shell
git remote set-url origin [email protected]:githubUsername/repository.git
# setできたかcheck
git remote --verboase
origin [email protected]:githubUsername/repository.git (fetch)
origin [email protected]:githubUsername/repository.git (push)

git push

username, password なして push できるか check。お疲れ様でした。

shell
git push origin master
Copyright 2023 © tatsuro.dev