現状では、root でのログインを無効にはしているものの、管理用の一般ユーザーのIDとパスワードが漏れてしまえば、第三者からSSHアクセスが出来てしまう。
パスワードを強固なものにしていたとしても、延々とパターンを繰り返せばそのうちヒットしてしまう。
無論、ID、パスワードの文字数を増やせば確率は低くなるがゼロにはならない。
そのための対策として、『鍵認証』を使う方法が用意されている。鍵認証の方式であれば、秘密鍵ファイルが存在する端末から出ないとログイン出来ないので、安全性を高めることが出来る。
サーバー側で鍵ペアの作成
鍵ペア生成の操作はSSHでアクセスするユーザー毎に行う必要がある。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): ←変更する必要がなければEnter
Created directory '/home/hoge/.ssh'.
Enter passphrase (empty for no passphrase): ←必要があれば、パスフレーズを入力
Enter same passphrase again: ←先ほど入力したパスフレーズを再入力
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
(以下略)
$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys ←公開鍵のリネーム
$ chmod 600 .ssh/authorized_keys ←公開鍵のパーミッション変更
このあとは、『秘密鍵』ファイル(.ssh/id_rsa)をクライアントにダウンロードし、ターミナルソフトからのログイン時にダウンロードした秘密鍵ファイルを使用してログインすればOK。
のはずだったのだが、うまく行かなかった。
クライアント側で鍵ペア作成
鍵ペア生成の作業はクライアント側で行っても良いようなので、Windows 10上のTeratermから操作した。
鍵ペア生成
- 『設定』 > 「SSH鍵生成(N)…」 のメニューを選択。
- 「TTSSH: 鍵生成」ダイアログボックスで、『鍵の種類』を選択し、『生成』ボタン押下
- パスフレーズを入力
- 『公開鍵の保存』ボタン押下
- 『秘密鍵の保存』ボタン押下

公開鍵ファイルをサーバーにアップ
- 『ファイル』 > 「SSH SCP」メニューを選択
- 「TTSSH: Secure File Copy」ダイアログボックスで、保存した公開鍵ファイルをサーバーにアップ
- $ cat id_ecdsa.pub >> .ssh/authorized_keys サーバー側で左記コマンドを実行し公開鍵情報を転記。

鍵ペアでの接続確認
- 『ファイル』 > 「新しい接続」 でTeratermの新規ターミナルを開く
- 「SSH認証」ダイアログボックスでユーザー名、秘密鍵生成時のパスフレーズを入力、「RSA/DSA/ECDSA/ED25519鍵を使う」にチェックを入れて、保存済みの秘密鍵ファイルを指定し、「OK」ボタン押下。

パスワード認証を制限
- $ sudo vi /etc/ssh/sshd_config でSSHの設定ファイルを開く。
- 修正箇所は以下の3箇所。
- RSAAuthentication yes
- PubkeyAuthentication yes
- PasswordAuthentication no
- sshdのサービスを再起動。
- 『ファイル』 > 「新しい接続」 でTeratermの新規ターミナルを開く
- 「SSH認証」ダイアログボックスでユーザー名、パスワード、「プレインパスワードを使う」にチェックを入れて、「OK」ボタンを押下し、ログイン出来ないことを確認する。
FileZillaからSSH接続する
クライアントからのSSH接続を鍵認証のみにしたことで、これまでパスワード認証で接続していたFileZillaの方も設定を行う必要が出てきた。
FiliZilla自体は鍵認証に対応しているものの、鍵を生成する機能はないので、別途作成する必要がある。
鍵ペアの作成自体は、Teratermで作成し、それを変換して使うようだ。
手順は下記のサイトを参照するのが良いだろう。
サーバー側での操作は、先述の『公開鍵ファイルをサーバーにアップ』の手順で、TeraTerm経由で操作できる。

コメント