有効な無駄知識を…?

ITや情報系のネタ中心に書いていくつもりですが…。時々思い出したように更新。

SSH接続にて、ed25519の公開鍵+パスワードの二段階認証を行う

2017-05-21 15:36:06 | FreeBSD

SSH接続にて、ed25519の公開鍵+パスワードの二段階認証を行う

概要

サーバーを遠隔から操作する場合は、SSH接続にてコマンドにて操作することが一般的です。 誰でサーバーを操作できる状態は問題があるため、サーバーへの接続には認証が設けられています。 認証には、公開鍵を利用した認証を使う場合が多いです。

公開鍵の暗号方式は、RSAが多く使われていますが、最近のOpenSSHでは、 ECDSA、ed25519という比較的新しい暗号形式もサポートされるように なってきました。
ここでは、ed25519の公開鍵を作成し、SSH接続の認証に用いたいと思います。
また、今回の公開鍵の認証だけではなく、パスワード認証も併用した 二段階認証を設定します。

前提条件

今回は、以下の条件にて設定および動作確認をしました。

※セキュリティを維持するためにも最新版の利用をお勧めします。

ed25519の鍵を作成する。

ed25519の鍵を作成します。 鍵生成のコマンド以外は、通常の鍵の作成方法と同じです。

公開鍵を作成したいユーザでログインし、サーバーのSSHのバージョンを確認します。 OpenSSH 6.5以上であれば良好です。

% ssh -V

ed25519方式の鍵を作成します。

% ssh-keygen -t ed25519

問い掛け内容を入力していきます。今回は以下の通りに設定しています。
hogeは現在のログインユーザ名を表します)

問いかけ内容は以下の通りです。
  • Enter file in which to save the key (/home/hoge/.ssh/id_ed25519)

    公開鍵・秘密鍵の保存先を指定します。 今回は、既定値の「/home/hoge/.ssh/id_ed25519」のままとします。

  • Enter passphrase (empty for no passphrase):

    秘密鍵のPassphrase(秘密鍵を使用するためのパスワード)を設定します。 Passphraseを設定すると、認証以外で秘密鍵を使用する度にパスワードを聞かれます。 未設定にすることも可能ですが、今回は設定することにします。

    ※Passphraseを入力しても、表示上は入力文字は見えません。未設定の場合はそのままEnterキーを押下します。
  • Enter same passphrase again:

    上で設定したPassphraseの確認です。上で設定したPassphraseを再度入力します。

全ての設定が完了すると、公開鍵・秘密鍵の保存先に秘密鍵・公開鍵が作成されます。

  • id_ed25519:秘密鍵(クライアント用)
  • id_ed25519.pub:公開鍵(サーバー用)

サーバー上では公開鍵を持ち、接続するクライアントには秘密鍵を設定します。 暗号鍵は、この段階でSFTPなどを使いクライアントに移動してください。
今回は「saba_PrivateKey」という名前をつけています。

OpenSSHに合わせて公開鍵の名前変更と、パーミッション変更を行います。

% mv ~/.ssh/id_ed25519.pub ~/.ssh/authorized_keys
% chmod 600 ~/.ssh/authorized_keys

ファイルの状態を確認します。

% ls -l ~/.ssh/

上の状態では公開鍵と暗号鍵の両方が存在していますが、 セキュリティ上、サーバー側からは暗号鍵を削除することをお勧めします。

これで、公開鍵の作成は完了です。

公開鍵+パスワードの二段階認証を設定する

OpenSSHにて、公開鍵+パスワードの二段階認証を有効にします。

# vi /etc/ssh/sshd_config

変更箇所は、2カ所です。

 
# チャレンジレスポンス認証を有効にする(コメントアウトを外す)。
ChallengeResponseAuthentication yes
 
# 二段階認証を有効にする(追記する)。
AuthenticationMethods publickey,keyboard-interactive

設定が済んだら、OpenSSHを再起動します。

# service sshd restart

以上で、公開鍵+パスワードの二段階認証の設定、及びサーバ側の設定は完了です。

※以下、説明上、PuTTYとFileZillaの両方で秘密鍵の変換をしていますが、PuTTYとFileZillaの どちらで変換しても同じ鍵ファイルが作成されます。変換はどちらか一方で十分です

クライアントのSSH接続(PuTTY)を設定する。

PuTTYで、サーバーに秘密鍵でログイン出来るようにします。 OpenSSHで作成した秘密鍵はそのままではPuTTYで使用できないため、 使用前に鍵の変換を行います。

PuTTY 鍵生成(PuTTYgen)で鍵を変換する。

PuTTY 鍵生成(PuTTYgen)でを使用して、秘密鍵をPuTTYで使用できる形式へ変換します。 PuTTYgenは、PuTTYをインストールすると同時にインストールされています。

PuTTY 鍵生成(PuTTYgen)を起動し、「読み込み」ボタンを押下します。

「秘密鍵の読込」というダイアログが開くので、サーバーから取得した秘密鍵を選択します。 今回の場合は、「saba_PrivateKey」というファイルになります。

秘密鍵にPassPhraseを設定している場合は、入力フォームが表示されるため、 設定したPassPhraseを入力します。

鍵の保存に関する通知が出るため、内容を確認し「OK」を押下します。

秘密鍵の読み込み後、「秘密鍵の保存」ボタンを押下します。

保存ダイアログで、適当なフォルダに秘密鍵を保存します。

以上で、秘密鍵の変換は終了です。

秘密鍵を使ってサーバーに接続する。

秘密鍵を使ってサーバーに接続する場合は PuTTYの「接続」→「認証」から、「認証のためのプライベートキーファイル」に上で 変換した秘密鍵を設定してログインします。

設定し秘密鍵にてサーバに接続します。問いかけを入力し、ログインできれば設定完了です。

  • Passphrase for key:秘密鍵に設定したPassphraseを入力します。Passphraseが未設定の場合は表示されません。
  • Password for hogehoge:該当ユーザー(秘密鍵を作成したユーザーと 同じユーザーの、ログインパスワードを入力します。

クライアントのSFTP接続(FileZilla)を設定する。

FileZillaにて、サーバーに秘密鍵でログイン出来るようにします。 設定方法は通常の秘密鍵の登録方法と同様です。

秘密鍵を登録する。

FileZillaに秘密鍵を登録します。

FileZillaを起動し、メニューバーから「編集」→「設定」を選択し、設定ウィンドウを表示します。 設定ウィンドウの中から「接続」→「SFTP」を選び、「鍵ファイルを追加」ボタンを押下します。

「秘密鍵が格納されたファイルを選択」というダイアログが表示されるので、 サーバーから持ってきた秘密鍵のファイルを選択します。

「鍵ファイルの変換」という確認ダイアログが表示されるため、「はい」を押下します。

秘密鍵にPassPhraseを設定している場合は、入力フォームが表示されるため、 設定したPassPhraseを入力します。

変換した鍵ファイルの選択画面が表示されるため、適宜ファイル名を指定して 保存します。

保存先を指定すると、保存した鍵ファイルが秘密鍵の一覧に表示されます。 これで、必要に応じて認証に秘密鍵が使用されます。

以上で秘密鍵の設定は終わりです。

秘密鍵を使ってサーバーに接続する。

設定した秘密鍵を使ってサーバーに接続します。二段階認証の設定を行っているため、 接続設定には、パスワードの設定も必要です。

付録

今回は、以下のウェブサイトを参考にしました。



最新の画像もっと見る

コメントを投稿