WinSCP にログインしようとして、秘密鍵を入力してくださいという表示が出て、ログインできずに困ったことはありませんか?
弊社でも、新人に「秘密鍵ってなに?」と聞かれたので、この機会にまとめてみました。
- 秘密鍵とは何なのか?
- どうやって作るのか?
を、誰でも分かるようにご説明いたします。
ぜひ参考にしてください。
※WinSCPインストールがまだの方は、別記事の「迷わずできる!WinSCP 5.5日本語版のダウンロードとインストール方法」で説明しているので、参考にしてください。
1. 秘密鍵とは
秘密鍵とは、パスワード認証よりさらにセキュリティを強くするためのものです。
WinSCPでサーバーに接続する時に、通常はパスワードが必要です。
しかし、パスワードのみの認証では、接続時の情報がネットワーク上を流れるため、最悪の場合パスワードを盗まれて、他人にログインされるという可能性があります。
一方、秘密鍵を用いる鍵認証では、パスワードがネットワーク上を流れないため、盗まれることはありません。
つまり、秘密鍵を用いることでパスワード認証よりさらにセキュリティを強くすることができます。
鍵認証には2種類の鍵がある
鍵認証では、秘密鍵と公開鍵の2種類の鍵を、必ずセットで利用します。
・秘密鍵
…あなたの手元のPCに入れておきます。
・公開鍵
…サーバーにあらかじめ渡しておくものです。
そして、作成された秘密鍵と公開鍵が一致してはじめて、ログインできます。
鍵認証の仕組みについて詳しく知りたい場合、「鍵交換方式による認証」でわかりやすく説明されています。参考にしてみてください。
WinSCPにログインする時に確認しておきたいこと
まずサーバー管理者に「認証方法は鍵認証ですか?パスワード認証ですか?」と聞いてみましょう
※ちなみにFTPでは鍵認証を使うことが出来ないので、パスワードでログインしましょう。
①パスワード認証の場合
…秘密鍵は不要です。パスワードを教えてもらいましょう。
②鍵認証の場合
… パスワードは入力不要です。
引き継ぎの場合は、すでにサーバーには公開鍵が設定されているはずなので、サーバー管理者から秘密鍵とパスフレーズ(秘密鍵のパスワード)をもらいましょう。
秘密鍵とパスフレーズを入手したら、秘密鍵でのログイン方法へ。
③「新しく設定するから作って」と言われてしまった場合
…公開鍵と秘密鍵をセットで作り、公開鍵はサーバー管理者に渡してサーバーに設定してもらいましょう。秘密鍵はあなたが保管しましょう。
では、実際に秘密鍵を作ってみましょう。簡単ですのでサクサク作ってしまいましょう。
2. 秘密鍵の作り方
WinSCPのインストール時に自動でインストールされている、PuTTYgenというアプリで公開鍵と秘密鍵を同時に作ることができます。
1.「スタートボタン」→「WinSCP」→「鍵関連ツール」→「PuTTYgen」をクリックします

2.「Generate」(鍵の生成)をクリックします
※Type of generate(鍵の形式)…一般的に使われている「SSH-2 RSA」のままでOK
※Number of bits in a generated key(鍵の強度)…一般的に使われている「2048」のままでOK

3.ウィンドウ内で適当にマウスを動かしましょう
マウスの動いた軌跡から鍵が作られるので、バーがどんどん進んでいきます。

4.バーが最後まで進んだら、必要情報を入力しましょう
①Key commentはそのままでOK
…鍵に自分で付けることのできるコメントです。好きなコメントを入れてもOKです。
②Key passphrase(パスフレーズ)を入力
…秘密鍵のパスワードです。好きなパスワードを入力してください。
※パスフレーズは忘れないようにしてください。
③Confirm passpraseに②を再入力

5.最後に鍵を保存して完了です!まずは秘密鍵から保存しましょう
「Save private key」をクリックします

6.すると、保存画面が開くので、「private_key」と入力し、「保存(s)」をクリックします
※好きな場所に好きな名前で保存してOKです
※秘密鍵は無くすとサーバーに接続できませんので、保存した秘密鍵は削除しないでください。また、他人に渡さないように注意してください

7.以上で、秘密鍵が保存されました。これで秘密鍵の作成は完了です
8.続けて公開鍵を保存しましょう。枠内の文字をすべて選択→右クリック→「コピー」を選択します
※この暗号のようなものが公開鍵です。

9.メモ帳を開き、右クリック→「貼り付け」してください

10.公開鍵がメモ帳にコピーできました
次に、「ファイル」→「名前を付けて保存」を選択してください

11.すると、保存画面が開くので、「public_key.pub」と入力し、「保存(s)」をクリックします
※.txtは消す
※保存場所とファイル名は他のものでもOKです

これで秘密鍵と公開鍵の作成が完了しました!
- 秘密鍵 …そのまま、手元のPCに入れたままにしてください。
- 公開鍵 …サーバーに設定しましょう。
さっそく、実際に公開鍵をサーバーに設定してみましょう。
3. 公開鍵の設定方法
1.WinSCPを起動し、ログイン画面で、以下の情報を入力し「ログイン」をクリックします
- ファイルプロトコルで「SFTP」を選択
- ホスト名
- ポート番号
- ユーザ名
- パスワード

2.下記の場所を表示してください。
- 左枠(手元のPC) さっき保存した公開鍵ファイル public_key.pub の場所
- 右枠(サーバー) /home/[ユーザ名]/.ssh

3.public_key.pubを左(手元のPC)から右(サーバー)へドラックアンドドロップします

4.すると確認画面が表示されるので、「コピー」をクリックします

5.これで、コピーができました

6.次に、public_ key.pubをauthorized-keysに追加します。以下の手順で進めてください
①Tera TermなどのWindows用のターミナルクライアントを起動
※先ほどWinSCPにログインした時と同じ情報でログイン
※別途、Tera Termについても記事を後日詳しく書く予定です
②ls -laを入力
③ファイルが表示されます。その中に、さっきコピーしたpublic_key.pubがあります。
④public_ key.pubをauthorized-keysに追加するため、「cat public_key.pub >> .ssh/authorized_keys」を入力

これで公開鍵がサーバーに設定されました。
※注:以前に、公開鍵を設定したことがある場合は、新しい公開鍵のテキストが以前に追加した公開鍵から改行されている必要があるので、注意してください。以下の画像のようにそれぞれの鍵が改行されていればOKです。

7.パスワード認証の設定を無効にする
※念のため、秘密鍵でログインできるか確認してからパスワード認証を無効にしましょう。
① 設定ファイルは /etc/ssh/sshd_config にあるのでvi /etc/ssh/sshd_configで編集する。
② PasswordAuthentication yes を PasswordAuthentication no に変更する。
③service sshd restart でSSHサーバーを再起動します。
8.これで、もうパスワードではログインできなくなりました。今後は秘密鍵でログインしましょう。
4. 秘密鍵の使い方
-実際にログインしてみましょう
1.WinSCPを起動し、ログイン画面に、
・ファイルプロトコル
…ファイルプロトコルは「SFTP」を選択。SCPより高機能なのでこちらを選択。
・ホスト名
・ポート番号
・ユーザ名
を入力します

2.続いて、秘密鍵の「参照ボタン」をクリックします

※WinSCP 5.5 の場合は、「Advanced」→「認証」→「参照ボタン」をクリックしてください。

3.さっき保存したprivate_keyを選択し、「開く」をクリックします

4.これでログイン情報が揃ったので、「ログイン」をクリックします

5.確認画面が出ますので、接続するサーバーに間違いがないことを確認し「はい」をクリックします。
※サーバーのホスト鍵がWinSCPに未登録のときに表示されます。サーバーのホスト鍵の仕組みについて詳しく知りたい場合、「sshの仕組み」で詳しく書かれているので、参考にしてみてください。

6.次に、パスフレーズを求められるので、さっき設定したパスフレーズを入力して、「OK」をクリックします

7.これで、秘密鍵でログインできます!

※WinSCPのログイン方法や使い方は、別記事の「WinSCP 5.5の使い方:初心者でもスムーズに扱うための徹底マニュアル」で詳しく説明しているので、参考にしてください。
まとめ
秘密鍵についての疑問は解消されましたか?
私自身も初めて秘密鍵の存在を知ったときは、なかなか理解がむずかしかったです。
ただ、これからはますますセキュリティを重視するサイトが多くなるはずなので、
これまでパスワード認証しかやってこなかったとしたら、この機会に、鍵認証を実践することをオススメします。