【解説】FileZillaでサーバーに公開鍵暗号方式を使用して安全にSSH接続する方法
今回は、FileZillaでサーバーに接続する際に公開鍵暗号方式を使用して安全にSSH接続する方法を解説します。
サーバーに接続する際の認証方式の代表的なものとしてはパスワード認証があると思いますが、第三者に認証を突破されにくい、そのうえ鍵の管理が容易であるという点などで公開鍵暗号方式は優れています。
秘密鍵と公開鍵のペアを生成する
まず、接続元である手元のパソコンで秘密鍵と公開鍵のペアを生成します。
コマンドラインで簡単に作成できます。
MacやLinuxディストリビューションをお使いの場合は「ターミナル」、Windowsユーザーの方は「Windows PowerShell」を使います。
今回はWndows10上での「Windows PowerShell」を使用しながらの解説になります。
あらかじめご了承いただけると幸いです。
コマンド操作
以下は私が実際に打ち込んだものになりますが、今回必要なコマンド操作は全部で5つになります。
# 鍵を保存するためのフォルダを作成するコマンド
> mkdir key
# rsa方式で4096bit長の鍵ペアを生成するコマンド
> ssh-keygen -t rsa -b 4096
# 鍵ペアを保存するフォルダを絶対パスで指定
Enter file in which to save the key (C:\Users\User/.ssh/id_rsa):C:\Users\User/key/id_key
# 秘密鍵を保護するためのパスワードを入力
Enter passphrase (empty for no passphrase):
# 同じパスワードを再度入力
Enter same passphrase again:
鍵ペアはrsa方式では2048長以上で生成することが推奨されており、「ssh-keygen」コマンドの「b」オプションでbit数を指定しなかった場合は自動で2048bit長の鍵ペアが作成されます。
また、以下は実際の私の手元のWindows PowerShell上での出力ログになります。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS C:\Users\User> mkdir key
Directory: C:\Users\User
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024-03-25 12:37 AM key
PS C:\Users\User> ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\User/.ssh/id_rsa): C:\Users\User/key/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\User/key/id_rsa.
Your public key has been saved in C:\Users\User/key/id_rsa.pub.
The key fingerprint is:
SHA256:QlURTwVo1g3Ry7Q+8sbTJUR0O9z2tGHvYVFJVsioypw user@User-PC
The key's randomart image is:
+---[RSA 4096]----+
| ..+==@++*|
| . +oo Xo+|
| . o ..+ X+|
| . . *oB|
| .oSo o +o|
| .E . =.o|
| + +o|
| = .|
| . . |
+----[SHA256]-----+
PS C:\Users\User>
鍵ペアが生成されたか確認
鍵のファイル名と鍵の種類の対応は以下の表のようになっているので間違えないようにしましょう。
ファイル名と鍵の種類の対応 | |
---|---|
id_rsa | 秘密鍵 |
id_rsa.pub | 公開鍵 |
無事に鍵ペアが作成されたならば、以下の画像のようにフォルダ上に2つの鍵ファイルが作成されていることが確認できます。
接続先サーバーへ公開鍵の設置
ここまでで無事に鍵ペアの作成が終わったら、公開鍵を接続先のサーバーへ設置します。
「authorized_keys」ファイルを開く
設置というよりは、サーバー内の「authorized_keys」というファイルに公開鍵の情報を書き込む必要があります。
お使いのサーバーによって配置が異なる場合があるかもしれませんが、私が執筆当時使用している「Ubuntu 22.04 LTS」では以下のディレクトリに配置されています。
公開鍵情報を書き込む
「authorized_keys」ファイルを開けたら、ここに先ほど作成した公開鍵の情報を書き込みます。
書き込む方法はいたって簡単で、生成した公開鍵ファイルをメモ帳などのテキストエディタで開き、「ssh-rsa ...」から始まる行全体をコピペするだけです。
すでに「authorized_keys」ファイルに書き込まれている場合は、その行の真下の行にペーストします。
以下の画像は、実際に「authorized_keys」にコピペして公開鍵情報を書き込んだ様子です。
「authorized_keys」に公開鍵情報の書き込みが完了したら、忘れずにファイルの保存をします。
公開鍵は、スペースや不要な文字などのいわゆる「ゴミ」が入ってしまうと、ログイン時に正しく認証できないため、本来であれば人の手でコピペしない方が良いのですが、今回はコマンド操作による公開鍵情報の書き込みは割愛させていただきます。
公開鍵暗号方式によるログイン認証
「authorized_keys」に公開鍵情報の書き込みが完了したら、いよいよ実際に秘密鍵を使って公開鍵を設置したサーバーにログインしてみたいと思います。
FileZilla側での設定
今回はFileZillaを使ってサーバーにログインします。
FileZilla左上のメニューバーから「File」→「Site Manager」をクリックして、以下のように値を設定し、接続の準備をします。
FileZillaのSite Manager設定値 | |
---|---|
Protocol | SFTP(SSH File Transfer Protocol) |
Logon type | Key file |
Key file | 「Browser」から秘密鍵を選択。 |
秘密鍵は「Browser」をクリックして、秘密鍵が保存されているフォルダから秘密鍵ファイルを指定します。
「Browser」をクリックすると、以下の画像のようにエクスプローラーが現れますので、秘密鍵を保存したフォルダへ移動します。
秘密鍵の選択
しかし、作成した秘密鍵には拡張子が無く、秘密鍵のファイル名が表示されない場合があるので、その場合はエクスプローラーの右下より、表示するファイルの種類を「All files(*.*)」に切り替えます。
表示するファイルの種類を「All files(*.*)」に切り替えると、以下のように秘密鍵ファイルが現れますので、このファイルを選択し、「Open」をクリックします。
秘密鍵のフォーマット変更
ファイルを選択し、「Open」をクリックしたときに、以下のようにFileZillaに対応するファイルフォーマットに変更しますかと聞かれた場合は「Yes」をクリックします。
フォーマット変更で「Yes」をクリックした後に秘密鍵のパスワードを聞かれた場合は、鍵ペア作成時に入力したパスワードをここで入力します。
パスワードを入力し、秘密鍵のファイルフォーマットが変更出来たら、保存先を指定し、フォーマット変更後の新しい秘密鍵のファイル名を入力して、「Save」をクリックし、秘密鍵を保存します。
フォーマット変更前と同じファイル名を入力した場合は、ファイルを置き換えるかどうか聞かれますが、実際にはフォーマット変更前後では拡張子が異なるため、置き換えられることはありません。
そのまま「Yes」をクリックして先に進みます。
サーバーへ接続
前のフェーズで秘密鍵のフォーマット変更、保存が完了すると、以下のFileZillaの設定画面に戻ります。
ここで「Key file」の中に記入されている鍵ファイルが、先ほど新しくフォーマット変更した秘密鍵ファイルであることを確認したら、画面下部の「Connect」をクリックしてサーバーへの接続を試みます。
「Connect」をクリックすると、秘密鍵のパスワードを聞かれるので、最初の鍵ペア生成のフェーズで入力したパスワードを入力します。
入力後、右下の「OK」をクリックします。
接続確認
接続に成功すれば、画面上部のログに「successful」のフレーズが流れます。赤文字でエラーが出た場合は、鍵ファイルやパスワードが間違っている可能性があります。
また、画面右下のスペースに接続先のサーバーのディレクトリ構造が見えれば、接続が成功しています。
以上でFileZillaを使用した公開鍵暗号方式でのSSHログインが完了しました。
もちろんFileZillaでなくてもTeraTermなどの外部のサーバーと接続するクライアントツールがあれば、似たような設定で接続できるはずですので、是非トライしてみてください。
関連記事