箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

SSH鍵について勉強してみた

f:id:y_hakoiri:20191102121704j:plain

先週のことですが、会社で環境構築を行いました

その際に登場した「SSH鍵」

 

今までも何度か生成して、githubに登録みたいなことをしてきましたが

毎回何をしているのかわかっていないまま

なんとなくコマンドを叩いてきてしまっていたので、

 

SSH鍵がなんのためにあるもので

どのようにして扱えば良いのか、

まとめていこうと思います。

 

SSH鍵とは

  • リモートサーバーに安全に通信を行うためのプロトコル
  • 公開鍵と秘密鍵がある

 

今までいろんなSSH鍵の説明を読んできましたが、

初学者としていまいちしっくりくる記述がなくて

結局理解できない、みたいなことが起こっていました

 

最終的に、プログラミング初学者としてもっとも理解がしやすく

簡潔だと思ったのが、上の二つです笑

 

公開鍵と秘密鍵があって、秘密鍵は人に教えちゃいけない

みたいなことは誰でもわかると思うんですけど

 

それがそもそもなんのためにあるのかというと、要は

サーバーに安全に通信するためにこういった仕組みを使うんですね。

(めちゃくちゃざっくりとした説明)

 

 

どのようにして使うか

手順は以下の通りです

  1. サーバーに接続するクライアント(自分)がSSH鍵を生成する
  2. 生成したSSH公開鍵を自分が接続したいサーバーに登録しておく

 

SSH鍵を生成すると、自動的に公開鍵秘密鍵がペアで作られます

 

この公開鍵を、自分が接続したいサーバーにあらかじめ登録しておくことで

サーバー側が、アクセスしてきたクライアントに対し

「この公開鍵とペアになってる秘密鍵を持ってる奴じゃないと

ログインさせないぞ〜」みたいな感じにフィルタリングしてくれます。

 

だから、公開鍵をあらかじめ登録しておく必要があり、

秘密鍵は人に知られないようにする必要があるんですね。

 

SSH鍵を実際に作ってみる

$ ssh-keygen

このコマンドを打つと、公開鍵と秘密鍵が生成されます。

 

正確に言うと、ホームディレクトリに.sshというディレクトリが作られ

その中にid_rsaid_rsa.pubというファイルが作られます

 

$ ls ~/.ssh/ の結果↓

f:id:y_hakoiri:20190916153601p:plain

 

そしてid_rsaid_rsa.pubの中身を見ると、

それぞれ暗号みたいなものが書かれていて

これがまさに秘密鍵、公開鍵本体です。

 

id_rsaが秘密鍵で

id_rsa.pubが公開鍵ですね(pubはpublicの略)

 

ちなみに

$ ssh-keygen のコマンドでSSHキーペアを生成するとき、

鍵マークが出てきてPC自体のパスワードの入力を促されることがありますが、

これは無視してエンターキーを押して大丈夫です。

 

PCのパスワードを入れてももちろん問題ないのですが、

今後サーバーにログインするたびにこのパスワード入力を求めれらたりして

作業が結構面倒になったりします

(サーバーによっては、パスワードが設定されていると

接続させてくれないものもあったりする、、かも。)

 

以前ここで入れた自分のPCのパスワードが

秘密鍵になってしまっているんじゃないか?とか

公開鍵の一部に自分のPCのパスワードが含まれてしまっていないか?

これ公開しちゃって大丈夫なのか???みたいに

不安に思ったことがあるのですが、全く関係なかったです(笑)

 

ここでパスワードの入力を促される意味は、

 

「サーバーに公開鍵が登録されていて、あなたが秘密鍵を持っていれば

サーバーに接続自体はできるよ。でももっと安全面を考慮したければ

PC本体のパスワードを接続のたびに入力するよう設定することもできるよ。

もしそうしたければ今ここでPC本体のパスワード入れて〜。

必要なければ、エンターキー押してね

どっちにしろ公開鍵と秘密鍵が自動で生成されるよ」

 

 

ですね。

 

ちなみに、これを知らずにPCのパスワードを登録してしまったがために

毎回サーバーへの接続でパスワードを入れるのがめんどくさい!!

と言う場合は、設定を外すことができます

$ ssh-keygen -f ~/.ssh/id_rsa -p

 

今のパスワードを入力した後新しいパスワードの入力を促されるので、

そこで何も入力せずエンターキーを押せば、削除完了です

 

 

生成したSSH公開鍵を登録する

これは特筆することはないですが、

$ cat ~/.ssh/id_rsa.pub

でファイルの中身を確認すると鍵が書いてあるので

githubなりAWSなり、所定の場所に登録しておけばOK

 

 

まとめ

SSH鍵とは、

  • リモートサーバーに安全に通信を行うためのプロトコル
  • 公開鍵と秘密鍵がある
  • 公開鍵はサーバーに登録しておく。秘密鍵は自分が持っておく

 

きちんと勉強すればもっと奥が深いと思うのですが、

SSH鍵とは何者なのか。なんのためにあるのかが理解できただけでも

かなり大きな収穫でした。

 

参考

qiita.com