staff - blog post

Windows Git BashでSSH接続をするときパスフレーズの入力を省略する

Posted by MUTOU on

Windows Git BashでSSH接続をするときパスフレーズの入力を省略する

こんにちは!武藤です。

Git運用を始めてから1か月ちょっと経ちました。
みんな操作に慣れてきましたが、リモートリポジトリにアクセスする度にパスフレーズを入力するのが面倒という声が聞こえてきました。 いっそ、パスフレーズは設定しないという手段もありますが、セキュリティのことを考えると設定しておいたほうが安心です。

つけるなら11文字以上のフレーズにしないと、すぐにクラックされるという記事を見たことがあります。
でも、毎回11文字以上のパスフレーズを入力するのはとても面倒ですよね…。

今回は、そんな悩みを解消してくれる、パスフレーズの入力を省略する方法をご紹介します!

SSH agentを使う

SSH agentとは、公開鍵認証で使われる認証鍵を保持するプログラムです。
WindowsにGitをインストールする とGit Bashで利用可能です。
起動しておくことで、パスフレーズの入力を省略してリモートリポジトリへのアクセスが可能となります。

.bashrcを使えば、ssh-agentコマンドを毎回入力しなくても、Git Bashを起動したときに自動的にssh-agentを起動することができるようになります。 例えば、.bashrcの最後に、次のようなコマンドを追加をします。

#ssh-agent
eval `ssh-agent`
ssh-add

これでリモートリポジトリにアクセスする度に毎回パスフレーズを入力する必要はなくなりますが、これだけではセッションごとにパスフレーズを入力する必要があります。

今回はさらに、1回起動したssh-agentを別のセッションでも共用できる設定も追記します。
これにより、PCを起動して最初にGit Bashを起動した1回のみパスフレーズを入力すれば、Git Bashを再起動した後はパスフレーズの入力を省略できます。

パスフレーズの入力を省略する方法

(1) Git Bashを起動し、~/.bashrc ファイルを編集します。

vi ~/.bashrc

(2) 以下のコードを、最後に貼り付けます。

SSH_ENV="$HOME/.ssh/environment"

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
    echo succeeded
    chmod 600 "$SSH_ENV"
    . "$SSH_ENV" > /dev/null
   ssh-add
}

# test for identities
function test_identities {
    # test whether standard identities have been added to the agent already
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $? -eq 0 ]; then
    ssh-add
    # $SSH_AUTH_SOCK broken so we start a new proper agent
        if [ $? -eq 2 ];then
            start_agent
        fi
    fi
}

# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
    ps -ef | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
    test_identities
    fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
    if [ -f "$SSH_ENV" ]; then
    . "$SSH_ENV" > /dev/null
    fi
    ps -ef | grep "$SSH_AGENT_PID" | grep -v grep | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
        test_identities
    else
        start_agent
    fi
fi

「Esc」キーを押して、:wqと入力すると、保存して閉じます。

(3) Git Bashを閉じます。

(4) 再び、Git Bashを開きます。

(5) 開くとすぐに、パスフレーズを聞かれます。

Welcome to Git (version 1.7.8-preview20111206)
Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.
Enter passphrase for key '/c/Users/username/.ssh/id_rsa':

(6) パスフレーズを入力します。

これで別のセッションでも、パスフレーズの入力を省略できるようになりました!
パスフレーズを入力するのは、PCを立ち上げて最初にGit Bashを起動したときのみです!!

参考:Atlassian Japan Confluence:Git用SSHの設定

Let's talk!
PageTop

Copyright © GRANFAIRS inc. All Rights Reserved.