ssh-agentを利用して、安全にSSH認証を行う

  • 118
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

SSH認証、皆さんどのような手順で行ってますか?

ローカルで作業する分にはいいものの、
クラウド上にサーバーを立てて、そこからgitに接続...

などの場面で、まさか秘密鍵をサーバーに置くなんて危険な真似はしてないですよね?
(これ死亡フラグです。)

そんな危険度100%のあなたに是非お伝えしたいのが、ssh-agent

すっごい簡単に説明すると、彼は、ユーザーと常に一緒に行動してくれて、
必要な時に「はいっ」と秘密鍵を渡してくれる、ハイパーセキュリティボーイなのです。

今日はそんなssh-agentの使い方をまとめてみたいと思います。
(Macでの使用を想定しております。ご了承下さい。)

1. ローカルで鍵の作成

まずは通常のssh認証と同じようにローカルで秘密鍵の作成を行っていきます。
ここは特に問題ないと思うので省略。

(不明な方はこのリンクが参考になります。)

2. ssh-agentに鍵の登録

ここからです。
鍵を作成したら、ssh-add [鍵の場所]
で、ssh-agentさんに鍵を渡します。

ただ、この記述方法だと毎回ターミナルを起動するたびに登録がリセットされてしまう為、

ssh-add -K [鍵の場所]

としてあげましょう。

こうすることで、Macのキーチェーンストア(鍵の保管庫)に鍵が登録され、次回以降も自動で呼び出されるようになります。

3 登録された鍵の確認

ssh-add -l 

と打ち込むことで、今ssh-agentさんが認識している鍵の一覧を表示できます。

ssh-add -l.png

こんな感じですね! 
一番後ろに鍵の名前が書かれているので、ここに登録した覚えのある秘密鍵が表示されていればOKです。

今回は、EC2インスタンスのログイン鍵と、gitへの鍵を2つ登録してあります。

4 sshでログイン

では登録した鍵を使ってログインしてみましょう。
手順は簡単。
.sshディレクトリに移動して、

ssh -A [鍵の名前]

と打ち込めばオッケーです。
今回はEC2サーバーへとログインしてみました。

では、これで通常のログインと何が違うのでしょうか。

5 ログイン先から別サーバーにログイン

ここが今回の肝です!
今、ローカルに鍵が2つ(EC2とgit)、ログイン先のサーバーには鍵が0個存在しています。
つまり、通常だとこのログインしたサーバーから別サーバー(今回はgit)へのログインは出来ないですよね。

...ところが、出来るんです。
ssh-agent様のお陰で。

EC2にログインした際に、 -A というオプションを付けました。
これが「ssh-agentを用いてログインしますよ」と言った意味合いで、
つまりは、今EC2にログインしたユーザーと共に、ssh-agentさんもEC2にログインしているのです。
そして、ssh-agentさんは秘密鍵を持っているのでしたよね...?

と言うことは、サーバー → git へと接続をしたい際、

ユーザー:「ssh-agentさん、gitの鍵貸して」
ssh-agent: 「はいっ」
ユーザー: 「ローカルの秘密鍵を使って、サーバー上からgitにログインっと...!」

と言った具合にログインが可能になるのです。
なんてワンダフル。

ただこのログインには1つだけ設定が必要で、
サーバー上の .ssh フォルダ配下のconfig内に
ForwardAgent yes(ssh-agentを有効にしますよ)
と言った設定をしてあげないといけません。
(ホームディレクトリから、cd .sshで移動 → vi config で編集)

今回はサーバーからgitへのログインを想定しているので、

Host github
  HostName github.com
  User git
  ForwardAgent yes

こんな感じで書いてあげた上で、

ssh -T github

と言った具合にログインしてあげれば大丈夫でしょう。

Hi, NaokiMochizuki(gitの登録名), youkoso github comeon

と言った具合に(雰囲気)表示がされれば無事ログイン完了です。

git_login.png

これが正解でした。
大体合ってますね。 笑

最後に

あなたもssh-agentを用いて、安全なsshライフをお過ごし下さい。