SSH
Security
ssh公開鍵認証

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

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ライフをお過ごし下さい。