こんにちは、おはじきです。
前回はssh接続のやり方とホスト認証について解説しましたね。
本日はユーザー認証の1つである公開鍵認証についてお話します。
前回学んだホスト認証は、クライアントが本当に正しいサーバーに接続しているのかを確認するための認証でしたが、ユーザー認証は、サーバー側がこのユーザーはログインさせていいユーザーなのかを確認するための認証です。
代表的なユーザー認証の手段としてパスワード認証がありますが、これはまさにみなさんも普段よくやっているパスワードを入力してログインするという作業の事ですね。
前回でもパスワードを入力してリモートホストにログインをしました。
それに対し公開鍵認証とは、予めクライアント側で公開鍵と秘密鍵という対になる2つの鍵を作成します。
公開鍵をサーバー側に送信し特定のディレクトリ、ファイル名で保管します。
秘密鍵はクライアント側の特定のディレクトリ、ファイル名で保管します(デフォルトでOK)。
そして互いが持ってる2つの鍵を使って認証を行うのですが、この2つは割符のようなものだと思ってください。
割符とは何百年も前に使われていたアナログの認証方式で、文字や印を木片などに書き、それを2つ以上に割ったもので、それらを別々の人が所有しておき、認証する時に割符が合えばOKというもので公開鍵認証はまさにそれをデジタルで行ったものだといえます。
下図がイメージです。
この鍵のペアを作成する方法はssh-keygenコマンドを使います。
主なオプション
-t | 暗号化タイプを指定する(rsa,dsa,ecdsa,ed25519) |
-p | パスフレーズを指定する |
-f | 鍵ファイルを指定する |
-R ホスト名 | 指定したホストの鍵をknown_hostsファイルから削除する |
指定しなければrsaタイプの鍵が作成されますが今回はせっかくなのでecdsaで指定してみました。
鍵を作成するときにパスフレーズを設定します。
~/.ssh/id_ecdsaに秘密鍵が、
~/.ssh/id_ecdsa.pubに公開鍵が作成されました。
次に公開鍵をサーバー側のログインユーザーの~/.ssh/authorized_keysファイルに書き込みます。
どうするのかというとscpコマンドを使います。
scpコマンドとはsshを使って安全にリモートホストにファイルを転送するためのコマンドです。
これを使えばリモートホストに簡単かつ安全にファイルを転送できます。
書式: scp コピー元ファイル名 (ユーザー名@)コピー先ホスト名:コピー先ファイル名
scpコマンドで公開鍵を転送しパスワード認証ではなく公開鍵認証でログインするところまで画像で見ていきましょう。
1行目のコマンドが~/.ssh/id_ecdsa.pubをohajikiRemoteホストの~/.ssh/authorized_keysファイルとして転送したという動きになります。
そしてsshコマンドを使ってリモートホストにログインしようとすると今度はログインするユーザーのパスワードではなくパスフレーズを求めてくるようになりました。
パスフレーズを入力する事でログイン成功です。
ここでクライアント側、ホスト側でssh接続に利用するファイルのパスをまとめました。
Lpic102を受験される方は丸暗記しておいた方が良いかと思います。
・クライアント側
/etc/ssh/ssh_config | 設定ファイル |
~/.ssh/id_rsa | 秘密鍵を格納(rsaの部分に各認証方式名が入る) |
~/.ssh/id_rsa.pub | 公開鍵を格納 (rsaの部分に各認証方式名が入る) |
~/.ssh/known_hosts | ホスト認証用の公開鍵を格納 |
・ホスト側
/etc/ssh/sshd_config | 設定ファイル |
/etc/ssh/ id_host_rsa_key | 秘密鍵を格納(rsaの部分に各認証方式名が入る) |
/etc/ssh/ id_host_rsa_key.pub | 公開鍵を格納 (rsaの部分に各認証方式名が入る) |
~/.ssh/authorized_keys | ユーザー認証用の公開鍵を格納 |
前回から2回に渡りLinux同士のssh接続のやり方について解説しました。
sshコマンドを用いてのssh接続というのはインフラエンジニアでしたら頻繁に行う事かと思いますので是非実践して自分のものにしてみてください。
それでは。