SSHの認証方式には、パスワード認証方式と公開鍵認証方式があります。
パスワード認証方式とは、ユーザ名とパスワードで認証する方式です。
一方、公開鍵認証方式とは、秘密鍵と公開鍵で認証する方式です。
パスワード認証方式は、一般的な認証方式ではありますが、正しいユーザ名とパスワードさえわかれば誰でもサーバにログインすることができてしまうので、セキュリティ的に脆弱な認証方式となります。
これまで、rootユーザのログイン禁止、SSHのポート番号変更を行ってきましたが、SSHに対するセキュリティ対策としてはまだ十分とは言えません。
悪意あるユーザによる不正なログインから自分のサーバを守るために、パスワード認証を禁止し、公開鍵認証によるログインを行うことをおすすめします。
今回は、公開鍵認証を行うための設定、および、パスワード認証によるログインを禁止する設定について説明します。
※以下の環境を例に説明します。
- サーバOS:CentOS6
- クライアントPC:Windows10
- SSH接続ツール:RLogin
1.公開鍵認証方式とは
公開鍵認証方式とは、秘密鍵と公開鍵で認証する方式です。
クライアントPCに秘密鍵を設定し、サーバに公開鍵を設定します。
対となる秘密鍵、公開鍵が揃った場合のみ、サーバにログインすることができます。
なお、サーバにログインする際、秘密鍵にアクセスするために、事前に設定したパスフレーズを正しく入力する必要があります。
2.クライアントPCで秘密鍵と公開鍵を作成
クライアントPCで、SSH接続ツールのRLoginを使って、秘密鍵と公開鍵を作成します。
ただ、その場合、秘密鍵をサーバからクライアントPCに移動する必要があり、ネット上に秘密鍵が流れることになるのでセキュリティ的にはよくありません。
① まず、SSH接続ツールのRLoginを起動します。
② 「Server Select」画面で、「新規」をクリックします。
③ 「Server New Entry」画面で、「プロトコル」をクリックします。
④ 「Server New Entry / プロトコル」画面で、「認証キー」をクリックします。
⑤ 「認証キー」画面で、「新規」エリアに「RSA2」「2048」が選択されていることを確認し、「作成」をクリックします。
⑥ 「SSH鍵の作成」画面で、任意のパスフレーズを入力して「OK」をクリックします。
⑦ 「認証キー」画面で、「認証キーリスト」エリアに作成した認証キーが表示されていることを確認します。
これで、クライアントPCに秘密鍵と公開鍵が作成されました。
3.クライアントPCに秘密鍵を設定
クライアントPCで秘密鍵と公開鍵の作成が完了したら、秘密鍵を取り出し、クライアントPCの任意の場所に配置します。
① 「認証キー」画面で、「認証キーリスト」エリアに表示されている認証キーの中から、今回作成した認証キーをチェックし、「エクスポート」をクリックします。
② 「SSH鍵ファイルの保存」画面で、秘密鍵を保存する任意の「ディレクトリ名\ファイル名」を指定して、任意のパスフレーズを入力し、「OK」をクリックします。
以下は、ファイル名を「id_rsa」とした場合の例です。
指定したディレクトリ配下に「id_rsa」というファイル名のファイルが作成されていることを確認して下さい。
③ 秘密鍵でサーバにログインする設定を行います。
「Server New Entry」画面で、以下の項目を入力します。
- エントリー/コメント: 任意の文字列を入力して下さい。
- プロトコル: ssh
- Server Address: サーバ会社から通知されたIPアドレス(※)
- Socket Port: SSH接続のポート番号
- User Name: 一般ユーザのユーザ名
- Password: 一般ユーザのパスワード
- デフォルト文字セット:UTF-8
※ さくらのVPSの場合、「[さくらのVPS] 仮登録完了のお知らせ」メールにより通知されます。
そして、「参照」をクリックし、先ほど作成した「id_rsa」ファイルを指定します。
最後に、「OK」をクリックしてクライアントPC側の設定は完了です。
4.サーバに公開鍵を設定
クライアントPCから公開鍵を取り出し、サーバに配置します。
① 「Server New Entry」画面で、「プロトコル」をクリックします。
② 「Server New Entry / プロトコル」画面で、「認証キー」をクリックします。
③ 「認証キー」画面で、「認証キーリスト」エリアに表示されている認証キーの中から対象の認証キーをチェックし、「公開鍵」をクリックします。
④ 「Public Key」画面で、「クリックボードにコピーされる公開鍵」の文字列をコピーしておきます。
コピーした文字列は、以降の手順⑩で使用するので、テキスト等に張り付けて保存しておいてください。
⑤ サーバに一般ユーザでログインします。
[testuser@ ~]$
⑥ 公開鍵を配置するフォルダを作成します。
「mkdir .ssh」と入力してEnterを押します。
[testuser@ ~]$ mkdir .ssh
⑦ 公開鍵を配置するフォルダのアクセス権を設定します。
「chmod 700 .ssh」と入力してEnterを押します。
- 「chmod」はアクセス権を設定するコマンドです。
- 「700」は自分のみ読み書き実行が可能というアクセス権です。
- 「.ssh」はアクセス権の設定対象となるフォルダです。
[testuser@ ~]$ chmod 700 .ssh
⑧ 公開鍵を配置するフォルダに移動します。
「cd .ssh」と入力してEnterを押します。
[testuser@ ~]$ cd .ssh
⑨ 公開鍵のファイルを作成します。
「vim authorized_keys」と入力してEnterを押します。
- これは、「authorized_keys」というファイルを作成するコマンドです。
- 「vim」はファイルを新規に作成するコマンドです。
[testuser@ .ssh]$ vim authorized_keys
⑩ 新規に作成するファイルが開くので、前の手順④でコピー・保存した公開鍵の文字列を設定します。
ssh-rsa qazxswedcvfrtgbnhyujm123456789ZAQWSXCDERFVBGTYHNMJUIKKLOP123456789polikmnjuyhbvgtrfcxdewszaq987654321qazxswedcvfrtgbnhyujm123456789ZAQWSXCDERFVBGTYHNMJUIKKLOP123456789polikmnjuyhbvgtrfcxdewszaq987654321qazxswedcvfrtgbnhyujm123456789ZAQWSXCDERFVBGTYHNMJUIKKLOP123456789polikmnjuyhbvgtrfcxdewszaq987654321qazxswedcvfrtgbnhyujm123456789ZAQWSXCDERFVBGTYHNMJUIKKLOP123456789pol testuser@
まず、「i」を入力して編集モードに切り替えます。
編集モードに切り替わると、画面左下に「– INSERT –」と表示され、ファイルを編集できるようになります。
-- INSERT --
次に、前の手順④でコピー・保存した公開鍵の文字列を貼り付けます。
そして、Escでノーマルモードに切り替えます。
画面左下の「– INSERT –」の表示が消え、ファイルを編集できない参照用のモードに戻ります。
⑪ 「:wq」と入力してEnterを押します。
- これは、ファイルを保存してvimを終了するコマンドです。
:wq
⑫ 公開鍵を設定したファイルのアクセス権を設定します。
「chmod 600 authorized_keys」と入力してEnterを押します。
- 「chmod」はアクセス権を設定するコマンドです。
- 「600」は自分のみ読み書きが可能というアクセス権です。
- 「authorized_keys」はアクセス権の設定対象となるファイルです。
[testuser@ .ssh]$ chmod 600 authorized_keys
これで、サーバ側の設定は完了です。
5.公開鍵認証によるログイン
ここまでの手順で、クライアントPC側での秘密鍵の設定、サーバ側での公開鍵の設定が完了しました。
いよいよ、公開鍵認証によるログインを行います。
① クライアントPC側での作業で行った、秘密鍵でサーバにログインする設定を使って、サーバにログインしてみます。
② 「Server Select」画面で、秘密鍵でサーバにログインする設定を選択し、「OK」をクリックします。
③ 「SSH鍵ファイルの読み込み」画面で、秘密鍵のファイルが指定されていることを確認し、パスフレーズを入力して「OK」をクリックします。
④ サーバにログインできました。
[testuser@ ~]$
6.パスワード認証によるログインの禁止
公開鍵認証によりログインできることが確認できたら、パスワード認証によるログインを禁止します。
パスワード認証によるログインの可否は、「/etc/ssh」フォルダ配下にある「sshd_config」ファイル(SSHサーバの設定ファイル)に、「PasswordAuthentication」という項目名で設定されています。
今回は、この「PasswordAuthentication」の設定値を変更します。
① まず、サーバにrootユーザでログインします。
[root@ ~]#
② 次に、「sshd_config」ファイルがある「/etc/ssh」フォルダへ移動します。
「cd /etc/ssh」と入力してEnterを押します。
- これは、「etc」フォルダ配下の「ssh」フォルダへ移動するコマンドです。
- 「cd」はフォルダを移動するコマンドです。
[root@ ~]# cd /etc/ssh
「/etc/ssh」フォルダへ移動できました。
[root@ ssh]#
③ 編集前の「sshd_config」ファイルをバックアップします。
「cp sshd_config sshd_config.yyyymmdd」と入力してEnterを押します。
- これは、「sshd_config」ファイルをコピーして「sshd_config.yyyymmdd」ファイルを作成するコマンドです。
- 「cp」はファイルをコピーするコマンドです。
- 「yyyymmdd」は設定変更を行う日など任意の年月日として下さい。(以下は、20170209とした例)
[root@ ssh]# cp sshd_config sshd_config.20170209
④ 「sshd_config」ファイルを編集します。
「vim sshd_config」と入力してEnterを押します。
- これは、「sshd_config」ファイルを開くコマンドです。
- 「vim」はファイルを開くコマンドです。
[root@ ssh]# vim sshd_config
「sshd_config」のファイルの内容が表示されます。
⑤ vimで開いたファイル中から「PasswordAuthentication」の文字列を検索します。
「/PasswordAuthentication」と入力してEnterを押します。
- 「/」は、vimで開いたファイル中から「/」の後に入力された文字列を検索するコマンドです。
/PasswordAuthentication
「PasswordAuthentication」の文字列に該当する箇所にカーソルがあたります。
検索を繰り返して、以下のように記載されている箇所を探して下さい。
#PasswordAuthentication yes
- 先頭の「#」はコメントアウトです。
- コメントアウトは「未設定」と同様の扱いになります。
- 「PasswordAuthentication」が未設定の場合、パスワード認証によるログインを許可します。
⑥ 「PasswordAuthentication」の設定を以下のように変更します。
- 先頭の「#」を削除(コメントアウトを外して設定を有効化)
- yes → no(パスワード認証によるログインを許可しない)
PasswordAuthentication no
まず、「i」を入力して編集モードに切り替えます。
編集モードに切り替わると、画面左下に「– INSERT –」と表示され、ファイルを編集できるようになります。
-- INSERT --
以下の要領で設定値を変更します。
- ↑↓←→で更新対象までカーソルを移動します。
- xやBackspaceやDeleteで元の設定値を削除します。
- 新しい設定値を入力します。
PasswordAuthentication no
設定値の変更が終わったら、Escでノーマルモードに切り替えます。
画面左下の「– INSERT –」の表示が消え、ファイルを編集できない参照用のモードに戻ります。
⑦ 「:wq」と入力してEnterを押します。
- これは、ファイルを保存してvimを終了するコマンドです。
:wq
⑧ 設定した内容を有効化するために、SSHサーバを再起動します。
「service sshd restart」と入力してEnterを押します。
[root@ ssh]# service sshd restart
SSHサーバの再起動が完了しました。
Stopping sshd: [ OK ] Starting sshd: [ OK ]
パスワード認証によるログインができなくなったことを確認して下さい。