QNAP NASのSSH認証を公開鍵方式のみにする

QNAP NASにはデフォルトでSSHが付属しています。
このSSHはQNAP独自のものらしいです。

デフォルトでは、adminユーザのパスワードログインが有効になっています。
他のユーザでは設定ファイルをいくら書き換えても入れない様になっています。
やや不便な仕様ですが、ひとまず置いておきます。

もしNASを外部からSSH経由で操作したいとなったとき、
SSHのパスワードログインを有効にしたままでは
ブルートフォースアタックされる可能性があり大変危険です。
特に、SSHをデフォルトの22番ポートで解放しているときは尚更です。

そこで、公開鍵方式でしかログインできない様にします。
SSHの設定ファイルは/etc/ssh/sshd_configです。
しかし、この設定ファイルは再起動すると内容が元に戻ってしまいます。
そのため、再起動後も設定を有効にするためには
設定ファイルを上書きしてSSHデーモンを再起動する必要があります。

以上をふまえ、手順をまとめます。

1.公開鍵・秘密鍵の作成
公開鍵方式認証に使う公開鍵・秘密鍵のペアを作成します。
以下ではssh-keygenコマンドを用いていますが、PuTTYgenを使っても一緒です。

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (ホームディレクトリ/.ssh/id_rsa): key
Enter passphrase (empty for no passphrase):パスワード
Enter same passphrase again:パスワード
Your identification has been saved in key.
Your public key has been saved in key.pub.

鍵の生成が成功すると、○○.pub、○○というファイルが出来ます。
.pubがあるほうが公開鍵、無いほうが秘密鍵です。

2.公開鍵の登録
生成した公開鍵をサーバに登録します。
~/.ssh/authorized_keysに公開鍵のデータをペーストします。
authorized_keysが無かったら作成してください。

3.設定ファイルの修正
パスワードログインを無効にするために、sshd_configを書き換えます。

vi /etc/ssh/sshd_config
#PasswordAuthentication yes

  ↓

PasswordAuthentication no

4.設定ファイルの退避
sshd_configをHDDに退避します。

cp -p /etc/ssh/sshd_config /share/MD0_DATA/.qpkg/autorun/

5.再起動時の設定
再起動後も設定ファイルの情報を有効にするために、
起動時に呼び出されるスクリプトに
設定ファイル上書き・デーモン再起動処理を記述します。

vi /share/MD0_DATA/.qpkg/autorun/autorun.sh
cp -p /share/MD0_DATA/.qpkg/autorun/sshd_config /etc/ssh/
/etc/init.d/login.sh restart

6.再起動
NASを再起動します。

reboot

以上で設定は完了です。
試しにパスワードログインしてみます。

[/] # ssh -p ポート名 アカウント名@ホスト名
Permission denied (publickey).

このように鍵を求めるメッセージが表示され、失敗します。
続いて、秘密鍵を指定してログインしてみます。

[/] # ssh -p ポート名 -i ~/key アカウント名@ホスト名
Enter passphrase for key '/home/××/key':

ログインできたら成功です。

設定ファイルを起動時に戻す設定をするという手間が入るのが面倒かと思います。
しかし、一度この設定をしてしまえば次回以降にsshd_configを
書き換えたい場合はHDDに退避したファイルを修正するだけで済みます。

外出時にサーバの設定をあれこれすることを考えると、
adminユーザだけでも十分な気がしますね。
公開鍵方式が安全とはいえ、ポート解放するときは
22番以外のポートにすることをお勧めします。

以上、覚え書きでした。

■参考文献
Livingdeadの日記: QNAP TS-409 Pro Turbo NAS の sshd を入れ替える