Gitにpushするときにパスワードやパスフレーズを毎回聞かれる問題の対処方法をまとめたい

HTTPSがSSHか

この問題はリモートリポジトリに対し、httpsで接続しているのかsshで接続しているのかによって対処方法が異なります。

自分がどちらの通信方法を使っているかはclone時にhttpsのurlかsshのURLかどちらでcloneしたかによりますが

Screenshot from 2016-02-13 20-38-20

すでにclone済みのリポジトリならば.gitのあるディレクトリ(ローカルリポジトリのルート)で

$ git remote -v
origin	https://github.com/garicchi/TesRepository.git (fetch)
origin	https://github.com/garicchi/TesRepository.git (push)

とコマンドをうって出てきたURLのプロトコルがhttps://ならhttps通信、git@ならばssh通信です。

HTTPS通信の場合

https通信の場合、pushしたときにユーザー名とパスワードを毎回聞かれます。

$ git push
Username for 'https://github.com': garicchi
Password for 'https://garicchi@github.com': 
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1/1), done.
Writing objects: 100% (2/2), 223 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/garicchi/TesRepository.git
   905108f..a9f2f5a  master -> master

.netrcを使う

ホームディレクトリの.netrcファイルにユーザー名とパスワードを書き込むことでpush時にそこを参照してくれるのでユーザー名とパスワードを聞かれなくなります。

ただ、ホームフォルダのファイルにパスワードを書いておくことになるのでセキュリティ的にやばそう

$ nano ~/.netrc
machine github.com
login {username}
password {password}

credential.helperを使う

OSに依存した認証マネージャを使ってくれるので.netrcよりは安全っぽい

こちらのサイトでOSごとにまとめられています。

今回はchacheを使う場合

$git config --global credential.helper cache

これでタイムアウトするまでパスワードが聞かれません

SSHの場合

sshの場合、pushなどでリモートリポジトリにアクセスした場合、毎回登録しているパスフレーズを聞かれる場合があります

$ git push
Enter passphrase for key '/home/garicchi/.ssh/id_rsa': 
Everything up-to-date

その場合、ssh-agentデーモンを使うことで回避できるようになるそうです

$ eval `ssh-agent`

秘密鍵を登録

$ ssh-add

これでssh-agentを起動してるうちはパスフレーズ入力を省略できます。

~/.bashrcに

eval `ssh-agent`

を登録しておけば自動起動してくれます。

しかし、ssh-agentの自動起動をサーバー側に登録しているとssh-agentが多重起動してしまうそうで、

その解決方法がこちらのサイトにありました。以下を~/.bashrcに追加すれば良いそうです。

# Setup ssh-agent
if [ -f ~/.ssh-agent ]; then
    . ~/.ssh-agent
fi
if [ -z "$SSH_AGENT_PID" ] || ! kill -0 $SSH_AGENT_PID; then
    ssh-agent > ~/.ssh-agent
    . ~/.ssh-agent
fi
ssh-add -l >& /dev/null || ssh-add

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.