SSH で公開鍵認証を使う時に毎回パスフレーズを入れるのは面倒ですよね?
そこで、よい仕組みがあります。
それが
ssh-agent
と
ssh-add
です。
細かい話は置いておきますが、この二つを組み合わせるとパスフレーズを毎回入れる必要がなくなります。
まず、ssh-agent を実行します。
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-YQW9LjOQAQSF/agent.3090; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3091; export SSH_AGENT_PID;
echo Agent pid 3091;
なんか出てきましたね、これは、環境変数と PID(ProcessID)です。
難しい話は省きますが、これを Shell に覚えこませればよいので、eval を使用します。eval の解説はまた別の機会に。
$ eval `ssh-agent`
これでオーケーです。
次に ssh-add を使用します。
$ ssh-add ~/.ssh/id_rsa_hoge
ここで、SSH のエージェントに id_rsa_hoge という秘密鍵を教えさせます。教える際にはパスフレーズが必要です。
$ ssh-add ~/.ssh/id_rsa_hoge
Enter passphrase for /home/mishihara/.ssh/id_rsa_hoge: ←ここでパスフレーズの入力をする。
Identity added: /home/mishihara/.ssh/id_rsa_hoge (/home/mishihara/.ssh/id_rsa_hoge)
これで、エージェントに鍵が登録できました。
#ワンライナーで鍵登録をもっと便利に
上記を組み合わせた複合技を私は使っています。
2020 年 4 月 11 日変更
alias ssh-add-normal='ssh-add -D > /dev/null 2>&1; kill -0 ${SSH_AGENT_PID} > /dev/null 2>&1; if [ $? -ne 0 ]; then eval `ssh-agent`; fi; ssh-add ~/.ssh/id_rsa'
これで、ssh-add を実行したときに ssh-agent が立ち上がっていないときには ssh-agent を立ち上げてから ssh-add を実行しているのです。
#毎回 SSH の鍵を指定してログインしている人にはこの処方箋
毎回 SSH の秘密鍵を
$ ssh -i ~/.ssh/id_rsa_hoge foo@bar
のように設定するのは面倒ですので、この場合には~/.ssh/config を設定します。
Host * ← すべてのログインに関して
ForwardX11 yes ←X11の転送をお願いする
ForwardAgent yes ←エージェントを使う(これはまたいつかの機会に)
ServerAliveInterval 120 ←(これもまたの機会に)
Host bar ← barというサーバを示すための単なる識別子
Hostname 192.168.XXX.YYY ←サーバの名前または IP アドレス
User foo ←あなたがサーバにログインするときにユーザ名
IdentityFIle ~/.ssh/id_rsa_hoge ←秘密鍵
これを設定しておけば、パスフレーズを毎回打つことなくログイン可能になります。
以下のように打てばオーケー
$ ssh bar
簡単に入れるようになりました。
以上!!