先週のことですが、会社で環境構築を行いました
その際に登場した「SSH鍵」
今までも何度か生成して、githubに登録みたいなことをしてきましたが
毎回何をしているのかわかっていないまま
なんとなくコマンドを叩いてきてしまっていたので、
SSH鍵がなんのためにあるもので
どのようにして扱えば良いのか、
まとめていこうと思います。
SSH鍵とは
- リモートサーバーに安全に通信を行うためのプロトコル
- 公開鍵と秘密鍵がある
今までいろんなSSH鍵の説明を読んできましたが、
初学者としていまいちしっくりくる記述がなくて
結局理解できない、みたいなことが起こっていました
最終的に、プログラミング初学者としてもっとも理解がしやすく
簡潔だと思ったのが、上の二つです笑
公開鍵と秘密鍵があって、秘密鍵は人に教えちゃいけない
みたいなことは誰でもわかると思うんですけど
それがそもそもなんのためにあるのかというと、要は
サーバーに安全に通信するためにこういった仕組みを使うんですね。
(めちゃくちゃざっくりとした説明)
どのようにして使うか
手順は以下の通りです
- サーバーに接続するクライアント(自分)がSSH鍵を生成する
- 生成したSSH公開鍵を自分が接続したいサーバーに登録しておく
SSH鍵を生成すると、自動的に公開鍵と秘密鍵がペアで作られます
この公開鍵を、自分が接続したいサーバーにあらかじめ登録しておくことで
サーバー側が、アクセスしてきたクライアントに対し
「この公開鍵とペアになってる秘密鍵を持ってる奴じゃないと
ログインさせないぞ〜」みたいな感じにフィルタリングしてくれます。
だから、公開鍵をあらかじめ登録しておく必要があり、
秘密鍵は人に知られないようにする必要があるんですね。
SSH鍵を実際に作ってみる
$ ssh-keygen
このコマンドを打つと、公開鍵と秘密鍵が生成されます。
正確に言うと、ホームディレクトリに.sshというディレクトリが作られ
その中にid_rsaとid_rsa.pubというファイルが作られます
$ ls ~/.ssh/ の結果↓
そしてid_rsaとid_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鍵とは何者なのか。なんのためにあるのかが理解できただけでも
かなり大きな収穫でした。
参考