Zapamiętywanie klucza ssh na windowsie

Pracując na Windowsie warto zaopatrzyć się w kilka niezbędnych narzędzi, które przeniosą nam kilka najlepszych rzeczy z Linuxa do świata Windowsa. Jednym z takich narzędzi jest Cmder, o którym pisał mój kolega. Narzędzie to, w połączeniu z MINGW, które instaluje pod spodem pozwoli nam na użycie niektórych poleceń bash-a w konsoli.

Jednym z takich narzędzi jest ssh-agent, dzięki któremu można zapamiętać wygenerowany klucz ssh w sesji i nie trzeba wpisywać hasła za każdym razem kiedy korzystamy z klucza. Na przykład, kiedy chcemy pobrać coś z gita a uwierzytelniamy się za pomocą klucza ssh, za każdym razem jesteśmy proszeni o hasło.

$ git pull
Enter passphrase for key '/c/Users/emil.pytka/.ssh/id_rsa':

Włączając ssh-agenta i dodając swój klucz jesteśmy pytani o hasło tylko w momencie dodawania tego klucza:

$ eval `ssh-agent -s`
$ ssh-add
Enter passphrase for /c/Users/emil.pytka/.ssh/id_rsa:
Identity added: /c/Users/emil.pytka/.ssh/id_rsa (/c/Users/emil.pytka/.ssh/id_rsa)

Kiedy już dodamy klucz, można go używać bez potrzeby wpisywania hasła. Niemniej jednak wpisywanie tych poleceń za każdym razem gdy odpalimy konsole jest trochę denerwujące, dlatego można zrobić prosty trik i dodać poniższy skrypt do pliku ~/.bash_profile.

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

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

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

Dzięki temu przy uruchomieniu konsoli bash-owej zostaniemy zapytani o hasło do klucza ssh, ale już później możemy go używać do woli. Plusem jest też to, że agent będzie działał, również na innych konsolach, dopóki nie zamkniemy wszystkich okienek. Więc jeśli ktoś często używa uwierzytelnienia za pomocą ssh z Windowsa, to radzę dodać ten skrypt i oszczędzić sobie wpisywania hasła za każdym razem.