■はじめに
普段からSSHを使用することがあるのですが、大変恥ずかしながらSSHというものをよく分かっていない状態でいままで使用しておりました。
これを機に、基礎的な内容となりますがSSHについてまとめてみました。
■SSHとは?
SSHは、Secure Shellの略称であり、あるコンピュータから他のコンピュータへと通信するためのプロトコルになります。SSHで通信する情報は暗号化されており、安全性が確保されていることが特徴です。
もともとは、Telnetなどの通信技術が使用されていたのですが、これらは通信内容が暗号化されていない状態(平文)となっておりました。容易に想像できると思われますが、このままだとパスワード等の重要な情報が盗聴されたりするという危険性があり、この問題点を解決するために作られたのがSSHとなります。
■認証方式について
SSHではいくつかの認証方式があるのですが、ここでは代表的な2例を紹介させていただきます。
パスワード認証
こちらはユーザー名とパスワードを使用して認証する方式となります。
サーバー側に上記を登録するだけなのですが、パスワード自体が簡単に設定されてしまったり、パスワードの使い回しによる盗聴の危険性などがあり、セキュリティ的に脆弱性が懸念されるため、使用することはなるべく避けたほうがよいと考えられます。
公開鍵認証
こちらは、公開鍵と秘密鍵を使用して認証する方式となります。
大まかな流れは以下のとおりです。
1. クライアント側で公開鍵と秘密鍵を作成する(公開鍵と秘密鍵は2つで1つのユニークなものとなります)
1. 公開鍵を何らかの方法でサーバー側に渡して登録しておきます
1. クライアントはログインしたいという通信をサーバーに送ります
1. サーバーは認証するために、事前にクライアントから受け取った公開鍵を用いて暗号化したデータをクライアントに送信します
1. クライアントは、秘密鍵を用いて受け取った暗号データを復号し、サーバーに返送します
1. サーバーは複合されたデータが正しい内容であれば認証に成功したと判断します
(2024/09/30 @angel_p_57さんにご指摘いただき、修正しました)
こちらの記事を参考にさせていただきました
- クライアント側で公開鍵と秘密鍵を作成する(公開鍵と秘密鍵は2つで1つのユニークなものとなります)
- 公開鍵を何らかの方法でサーバー側に渡して登録しておきます(このときに公開鍵とセッションIDが共有される)
- 認証時は、クライアントは秘密鍵を用いて署名を作成し、サーバーに送信します
- サーバーでは、公開鍵の照合と署名の検証を行い、両方が問題なければ認証に成功したと判断します
■公開鍵と秘密鍵の作成
簡単にはなりますが、クライアント側での公開鍵と秘密鍵の作成手順についても紹介させていただきます。
まずはディレクトリの作成
公開鍵と秘密鍵を保管しておくディレクトリを作成しましょう
$ mkdir ~/.ssh
$ cd ~/.ssh
SSHキーの作成
以下のコマンドでSSHキーを作成してください。(オプションをつけることも可能です)
$ ssh-keygen
作成に成功すると、以下のように公開鍵と秘密鍵が確認できると思います。
$ ls
id_rsa id_rsa.pub
-
id_rsa
: 秘密鍵 -
is_rsa.pub
: 公開鍵(pubはpublicの略)
サーバー側に公開鍵を登録
サーバー側の~/.ssh
配下にクライアント側で作成した公開鍵の中身を登録してください
※秘密鍵は流出しないようにクライアント側で大切に保管してください
■さいごに
いかがでしたか?
いつもなんとなく使用していたので、この機会に学習できたのはよかったです。
どなたかのお役に立てれば嬉しいです!