どうも、ラズパイエンジニアのかちおです。
シェルスクなどでsshする時にパスフレーズがかかっているとうまく動かないのですが、それを解決するためにssh-agentを使う必要があります。で、まったくわからなかったので調べて実際に動かした結果などを共有していきます。
そもそもssh-agentとは
sshをした先のサーバーで、ホストにある鍵を使いたかったりするときのためのもので、リモートにホストと繋がるソケットを置いて、そこに問い合わせるとssh秘密鍵が帰ってくるというセキュアな鍵送信方法、らしいです。
パスフレーズ省略への応用
自分のマシン自体でssh-agentを走らせておくと、秘密鍵を返してくれるソケットが出来上がります。でも~/.ssh/
に鍵あるんだからそれを使えばいいんじゃ?という話ですが、ここで出てくるのがパスフレーズの問題です。
ssh秘密鍵にパスフレーズを登録していた場合、sshやgit使用時に毎回シェルで入力する必要があります。
しかし、ssh-agentに鍵を登録する時にパスフレーズを入力すれば、電源が落ちるまでssh-agentが復号化された秘密鍵を持って置いてくれます。
なので、ローカルでssh-agentを起動して、そいつに~/.ssh/id_rsa
とかをパスフレーズ解除して登録すればいいことになります!
手順
1. ssh鍵ペアを作る
ssh-keygen
を使って鍵を作りましょう。すでに鍵がある場合はそれを流用してください。
2. ssh agentに秘密鍵を登録する
$ ssh-add ~/.ssh/id_rsa
鍵の名前は各自変えてください。そして、このコマンド実行時にパスフレーズを聞かれるので入力してください。
永続化(※MacOSのみ)
このssh-agentに登録した複合化済みの秘密鍵は、再起動するたびに消えてくれるので安心です。が、ももし毎回ssh-addするのがめんどくさい方は、MacOSのみ方法があります。
-Kオプションをつければいだけです。こうすると、Macのキーチェーンにパスフレーズが登録され、次回起動時も勝手にssh-addされた状態になります。
$ ssh-add -K ~/.ssh/id_rsa
さらに、これもめんどくさい人は、以下の内容を~/.ssh/configに登録すればいいです。
Host *
AddKeysToAgent yes
UseKeychain yes
AddKeysToAgentをyesにすることで、-Kオプションをつけなくてもssh-addの時やsshの時に強制的にパスフレーズがMacOSに保存されます。-Kをつけるのがめんどくさい方はぜひ。
また、UseKeychainをつけることで、ssh-agentを利用していなくても、MacOSに保存されたパスフレーズで自動的に~/.ssh/id_rsaなどを複合化してくれるようです。
ちなみにセキュリティ上はあまりよろしくないので、僕は書いていません。毎回-Kしてます。
3. ssh agentに追加された鍵を確認する
$ ssh-add -l
2048 SHA256:************************************** /Users/*******/.ssh/id_rsa (RSA)
先ほど登録した鍵が表示されてればOKです。
4. 試してみる
ssh git@github.com
とか試して見てください。
ちなみにgithubのsshはパスワードではなく公開鍵暗号方式なので、以前ログインしたパスワードが残っているかどうか心配する必要はないです。
パスフレーズ聞かれなかったら成功です。
まとめ
これで一度入力すれば以降パスフレーズなしでsshやgit cloneできるようななりました!
シェルスクでgitやsshを使う方はぜひ試して見てください!