sshでリモート接続する際、皆さんは、どうやって接続していますか。
接続する方法は、大きく分けて2つあります。パスワード認証方式と公開鍵認証方式です。
今回は、その中の公開鍵認証方式について紹介します。
公開鍵認証方式
sshでリモート接続する際のユーザ認証の方法の1つであり、1対の公開鍵と秘密鍵のペアを使ってユーザ認証を行います。
公開鍵認証方式をする場合、あらかじめクライアント側の公開鍵をサーバーに登録しておく必要があります。
クライアント
クライアントとは、和訳で、お客様や顧客であり、サービスや機能を使う側を指します。
自分が持っているPCなどは、基本、クライアント側です。
sshで接続元を指します。
サーバー
サーバーとは、クライアントとは逆で、サービスや機能をクライアントに提供する側を指します。
sshで接続先を指します。
方法
まず、クライアント側で公開鍵と秘密鍵を作成します。
$ ssh-keygen [オプション]
オプション | 説明 |
-t タイプ | 暗号化のタイプを指定する。 rsa1、rsa、dsa、ecdsa、ed25519 |
-p | パスフレーズを変更 |
-f ファイル名 | 鍵ファイルを指定する |
-R ホスト名 | 指定されたホストの鍵をknown_hostsファイルから削除する |
-b ビット長 | 鍵の長さをビット長で指定する |
オプションは、なくても鍵は生成できます。その場合、Enter3回して作成します。
生成された鍵は、ホームディレクトリの.ssh下にあります。
$ ls
id_rsa id_rsa.pub
id_rsaが秘密鍵でid_rsa.pubが公開鍵になります。
公開鍵をサーバーに登録するため、サーバー側の~/.ssh/authorized_keysファイルに公開鍵の内容を書き込みます。
ここで、秘密鍵の内容を書き込まないこと。$ rsync -av ~/.ssh/id_rsa.pub user@host.com(ssh先):publickey
そして、sshでサーバーにログインします。パスワード認証方式でログインです。
以下のように実行します。
$ cat publickey >> ~/.ssh/authorized_keys
これで、準備完了です。
再度、クライアント側から接続するとパスワードを要求されずサーバーにログインできます。
メリットとデメリット
メリットととして、公開鍵認証では、パスワード認証よりセキュリティが向上し、なりすましを防ぐことができます。
なぜなら、公開鍵は誰でも簡単に入手できる公開された鍵ですが、秘密鍵を持っている受信者のみが暗号を解くことができる仕組みになっているからです。
ですので、秘密鍵を公開してしまうと、不特定多数に入られてしまいます。
もし、秘密鍵を公開した場合は、再度、鍵を作り直す必要があります。
デメリットととして、処理時間がかかることや初めは、設定するのに苦労する点です。
まとめ
公開鍵認証は、パスワード認証よりセキュリティが向上します。
公開鍵認証は、公開鍵と秘密鍵のペアで照合します。