mixhostのレンタルサーバーで遊ぶ その4: クライアントで生成したキーを使ってSSH接続する

前回はレンタルサーバーmixhostにSSHで接続する方法を紹介しました。この紹介した方法ではmixhostのcPanelで認証のための公開キーと秘密キーを生成して、秘密キーをクライアントに導入する必要がありました。

今回はクライアントで生成済の認証キーをmixhostで利用する方法を紹介します。

SSHと公開鍵認証方式

公開鍵認証方式を簡単に説明すると、

  1. 「公開キー(ファイル)」と「秘密キー(ファイル)」のペアを作成する
  2. サーバに公開キーを、クライアントに秘密キーを配置する
  3. サーバはクライアントからアクセスがあると、クライアントが秘密キーが持っていることを確認する
  4. クライアントが正当な秘密キーを持っていることを確認したら、サーバはアクセスを許可する

という処理になります。

公開鍵認証方式では秘密キーはとても重要な存在です。このため本来はクライアント内にとどめておき、流出しないように管理する必要があります。

また、クライアント間で秘密キーを共有するのはリスクがありお勧めできません。

前回紹介した方法はmixhostでも推奨されている方法です。

今回はmixhostのレンタルサーバにSSHで接続してみます。mixhost伸す衣装する方法ではmixhostのコントロールパネル(cPanel)で公開キー・秘密キーのペアを生成して秘密キーをダウンロードすることになります。ダウンロードした秘密キーをSSHクライアントに設定すればSSH接続を行うことができます。

しかし下記の2点でちょっと心配があります。

  • 秘密キーをmixhostのサーバー(cPanel)からダウンロードする
    cPanelとの接続はSSL(HTTPS)で暗号化されているので安全ですが、秘密キーをコンピュータ間で移すというのはあまり気持ちのよいものではありません。
  • 秘密キーを複数のクライアントで共有してしまう可能性がある
    cPanelで簡単に秘密キーをダウンロードできてしまうので、複数のクライアントで同じ秘密キーをダウンロードしてSSH接続に利用してしまいがちです。

cPanelでは複数の認証キーペアを作れるので本来ならば、各クライアント用に認証キーペアを作るべきなのですが、一つの認証キーペアを使い回してしまう方も多いのではないでしょうか。

クライアントでの認証キーペアの生成

本来ならば各クライアントで認証キーペアを作成して、サーバ側に公開鍵を登録するべきです。今回はこの方法を試してみたいと思います。

認証キーの生成方法は使用しているクライアントによって異なります。

クライアントがWindowsの場合

Windowsでssh用の公開鍵・秘密鍵のペアを作成するにはフリーのSSHクライアントPuTTYについてくるPuTTYgenというコマンドを利用します。

PuTTYの入手

日本語化されたPuTTYは下記のURLからダウンロードすることができます。

ダウンロードしたファイルをどこかに置いておきましょう。また展開したファイルに「puttygen.exe」というファイルがあることを確認しましょう。これがPuTTYGenというコマンドです。

公開キー・秘密キーペアの新規作成

PuTTYGenを実行すると次のような画面が現われます。

キーペアの生成

ここで「生成する鍵の種類」が「RSA」で、「生成する鍵のビット数」が「2048」であることを確認して「生成」を選択しましょう。

すると「鍵」の欄の表示が変りバーが表示されるので、このバーがすべて緑になるまでマウスを適当に動かします。

マウスの動きを使ってキーに必要な乱数を生成しているようです。

キーの生成中

バーがすべて緑になると認証キーが完了し、画面の公開鍵(キー)が表示されます。

生成された公開キー

この公開キーは後ほど使用するので、メモ帳などにコピペして保存しておきます。

また、秘密鍵(キー)についてもSSHの接続時に必要になりますので、鍵のパスフレーズを入力した後、「秘密鍵を保存」を選択します。保存した秘密鍵(キー)は流出・紛失しないようにHDD/SSDに保存しておきましょう。

生成された秘密キーの保存

保存した秘密キーはPKK形式といわれるファイルとして保存されます。

秘密鍵のパスフレーズは省略することができます。

パスフレーズを省略するとSSH接続の際にパスワードの入力が不要になります。便利な反面、リスクがありますのでパスワードを省略するのはお勧めしません。

パスフレーズを省略する場合は、クライアントが十分保護されている場合(サインインできるユーザが限定されているなど)に限るようにしましょう。

これで公開キー・秘密キーペアの新規作成完了です。

既存の公開キー・秘密キーペアの利用

既にPuTTYでSSHを運用している場合は、公開キー・秘密キーを生成して利用しているかもしれません。

この場合はPuTTYGenを実行して「既存秘密鍵の読み込み」でPuTTYの秘密鍵ファイル(ppkファイルを)読み込むと、その秘密キーに対応した公開キーを表示させることができます。

読み込んだ公開キー

既存の秘密キーを使いたい場合は、このようにして表示された公開鍵(公開キー)をメモ帳にコピペしておきます。

クライアントがLinuxの場合

Linuxでssh用の公開鍵・秘密鍵のペアを作成するにはssh-keygenというコマンドを使います。sshクライアントが入っていればこのコマンドは存在しているはずです。

公開キー・秘密キーペアの新規作成

ssh-keygenコマンドを実行するだけで簡単に公開鍵・秘密鍵のペアを作成することができます。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/foo/.ssh/id_rsa):
Created directory '/home/foo/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/id_rsa.
Your public key has been saved in /home/foo/.ssh/id_rsa.pub.
...

途中でパスフレーズの入力を求められるので入力しておきます(パスフレーズなしにもできますが、安全のため、やはりパスフレーズは設定しておきましょう)。

特に問題がなければ、ユーザの「.sshディレクトリ」に、id_rsa.pubとid_rsaというファイルができます。id_rsa.pubが公開キー、id_rsaが秘密キーになります。

サーバの設定

ここからはmixhostのcPanelでの操作です。cPanelのセキュリティにある「SSHアクセス」を選択します。

SSHアクセスを選択

これで「SSHアクセス」という画面になるので「キーの管理」を選択します。

SSHキーの設定を選択

これでSSHキーの管理という画面に切り替わります。ここに「キーのインポート」というボタンがあるのでこれを選択します。

キーのインポート

これでキーのインポートという画面が開いたら「次のテキストボックスに公開キーを貼り付けます」のところに、

  • WindowsであればPuTTYGenで表示された公開鍵
  • Linuxであれば「.sshディレクトリ」にあるid_rsa.pubファイルの中身

をコピペします。

公開キーをインポート

またキーの名前の欄は空欄でも問題ないですが、クライアントを見分けられる名前(例えばコンピュータ名)にするとよいと思います。その他の欄は空欄でOKです。

あとは「インポート」を選択します。次のように表示されればOKです。

公開キーのインポート完了

キーの生成に成功したら「キーの管理に戻る」を選択します。

公開キーの有効化

SSHアクセスの画面では、公開キーの欄に先ほどインポートしたキーが追加されていますが、認証ステータスは「not authorized」となっているはずです。これはまだこの認証キーが使えないことを示しています。

公開キーの管理

ここでインポートした公開キーの「設定」を選択すると次のような画面になります。

公開キーの有効化

この画面で「Authorize」を選択すれば、このキーが使えるようになります。

公開キーの有効化の完了

もし複数のクライアントを使っている場合は、各クライアントの公開キーに対して同様に「インポート」と「Authorize」を行います。

SSHでの接続

サーバ側に公開キーを、クライアント側に秘密キーを用意できたのでいよいよ接続です。

接続するための情報は下記になります。

ホスト名自分のドメイン
ユーザ名cPanelのユーザ名
パスワード
(パスフレーズ)
認証キー生成時に入力したパスワード

ホスト名とユーザ名がわからない場合はcPanelの一般情報で確認しておきましょう。

サーバの情報

クライアントがWindowsの場合

クライアントがWindowsの場合はPuTTYというソフトを使うのがお勧めです。PuTTYを利用する場合はPPK形式の秘密キーファイルをSSHの設定で指定するのがポイントです。

PuTTYを起動すると「PuTTY設定」という画面が開きます。まずホスト名を入力し、接続タイプがSSHになっていることを確認します。

ホストと接続タイプの設定

次に左側のツリーから接続のところにある「データ」を選択し、「自動ログインのユーザ名」のところにユーザ名を入力します。

ユーザ名の設定

つづいて左側の「SSH」の前の「+」を選択してツリーを開き、「認証」選択します。そして「認証のための秘密鍵ファイル」にキーの生成時に保存したPPK形式の秘密キーを設定します。

秘密キーの設定

最後に左側で「セッション」を選んで保存済セッション一覧のところにわかりやすい名前(例えばmixhost)を入力して「保存」を選択します。

セッションの保存

これでmixhostにSSH接続するための設定が保存されました。

あとはセッション一覧から保存したセッションを選んで「開く」を選択します。これでmixhostとSSH接続を開始します。

初回は次のような表示が出るので「はい」を選択します。

サーバのフィンガープリントの確認

次のようにパスフレーズが要求されたら認証キーを生成するときに設定したパスワードを入力します。

認証キーのパスワードの入力

正しく入力すればこれで接続に成功するはずです。

クライアントがLinuxの場合

LinuxなどでクライアントとしてOpenSSHを使う場合は「ssh」コマンドを利用します。「-l」オプションでユーザ名を指定するのがポイントです。

$ ssh -l ユーザ名 ホスト名

初回は次のように表示されるので「yes」と入力します。

The authenticity of host 'ホスト名 (IPアドレス)' can't be established.
ECDSA key fingerprint is SHA256:******************************************.
Are you sure you want to continue connecting (yes/no)?

次にパスワードを聞かれるので認証キーを生成するときに設定したパスワードを入力します。

Enter passphrase for key '.ssh/mixhost':

正しく入力すればこれで接続に成功するはずです。

SSH接続を禁止にしたい場合

秘密キーが漏れた場合や、クライアントのPCを売却する場合などは、登録した公開キーを無効にしておきましょう。

一時的に無効にしたい場合はSSHキーの管理の画面で、無効にしたいクライアントの公開キーの「管理」を選択します。

公開キーの管理

これで次のような画面が表示されたら「Deauthorize」を選択します。

公開キーの無効化

これで選択した公開キーは無効になり、公開キーに対応したクライアントからはSSH接続できなくなります。

恒久的に無効にしたい場合は公開キーの「削除」を選択します。

公開キーの削除

下記のような画面にかわるので「キーの削除」を選択します。

公開キーの削除

これでこの公開キーは削除され、公開キーに対応したクライアントからはSSH接続できなくなります。



まとめ

今回はmixhostのレンタルサーバーで各クライアントで生成した認証キーを使ってSSH接続する方法を紹介しました。

mixhostの推奨方法はサーバ側(cPanel)で認証キーを生成して秘密キーをクライアントにコピーする方法ですが、本来はクライアントの生成した公開キーをサーバに登録する方が良いのではないかと思います。

次回はmixhostのWordPressクイックスタートで生成したWordPressサイトにリダイレクトの設定をしたいと思います。