もうusername, password は使用しない! githubに ssh で push する
![image](/static/bd673b21870d3073f644ca1206aec912/47930/github.jpg)
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 に設定します。
shellcd ~/.sshssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): githubEnter 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
shellHost github.comHostName github.comUser gitPort 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 が表示されます。
shellgit remote --verboseorigin https://github.com/repository.git (fetch)origin https://github.com/repository.git (push)
remote url を ssh に変更します。
shellgit remote set-url origin [email protected]:githubUsername/repository.git# setできたかcheckgit remote --verboase
git push
username, password なして push できるか check。お疲れ様でした。
shellgit push origin master