QNAP SSH接続を公開鍵認証にする

## やりたいこと

* ssh 接続認証を、パスワード認証ではなく公開鍵認証にしたい。


## 知っておくべきこと

### QNAP デフォルトの sshd 設定

* `admin` ユーザーによる接続のみ許可
* port `22`
* 公開鍵認証ではなく、パスワード認証
* `/etc/ssh/sshd_config` が再起動毎に上書きされるので、設定が初期化される
    + これを防ぐため、QNAP 公式 Wiki にある 再起動毎に任意の処理を自動実行する方法にならって設定する




設定を変更する
--------------------------------------------------------------------------------

ssh の有効化, ポート変更は Web管理画面から。

ssh 用のポートは DYNAMIC AND/OR PRIVATE PORTS である `49152 - 65535` 内で適当に選ぶかんじ。

![ssh-config-in-web-control-panel.png](https://qiita-image-store.s3.amazonaws.com/0/3189/f34913b8-1736-d008-fcae-37de65000d19.png)


いちおう ssh のバージョン確認して最新版であるかどうか見た。

```console
# ssh -V
OpenSSH_6.7p1, OpenSSL 1.0.1j 15 Oct 2014
```

`/etc/config/qpkg.conf` に `autrun` という名前のダミーパッケージを追記することで、
QNAP 再起動毎に指定したシェルスクリプトが実行されるようになる。

```cfg:/etc/config/qpkg.conf
[autorun]
Name = autorun
Version = 0.1
Author = neomilium
Date = 2015-01-03
Shell = /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
Install_Path = /share/CACHEDEV1_DATA/.qpkg/autorun
Enable = TRUE
```

```diff:/etc/ssh/sshd_config
- PubkeyAuthentication no
+ PubkeyAuthentication yes

     :

- PasswordAuthentication yes
+ PasswordAuthentication no
```

```console
# chmod +x /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
# ls -la /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
-rwxr-xr-x    1 admin    administ       105 Jan  3 04:58 /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
```


```console
# cp -p /etc/ssh/sshd_config /share/CACHEDEV1_DATA/.qpkg/autorun/
# ls -la /share/CACHEDEV1_DATA/.qpkg/autorun/
drwxr-xr-x    2 admin    administ      4096 Jan  3 05:40 ./
drwxrwxrwx   11 admin    administ      4096 Jan  3 04:27 ../
-rwxr-xr-x    1 admin    administ       105 Jan  3 04:58 autorun.sh
-rw-r--r--    1 admin    administ      3104 Jan  3 03:29 sshd_config
```

```console
# reboot
```


クライアント側から ssh 接続を試してログインできなくなっていることを確認する。

```console
$ ssh -p 58888 admin@192.168.10.100                                                                
Permission denied (publickey,keyboard-interactive).
```


クライアント側で `~/.ssh/config` を設定する。

```diff:~/.ssh/config
+ Host nas01-ts251.admin
+   HostName 192.168.10.100
+   Port 58888
+   IdentityFile ~/.ssh/nas01-ts251.admin.key
+   User admin
```

ふたたび ssh 接続を公開鍵認証で試して動作確認する。

```console
$ ssh nas01-ts251.admin
```

## 参考

* [Running Your Own Application at Startup - QNAPedia](http://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup#QPKG-based_method)
* [QNAPの基本構造について - uittie::blog](http://blog.uittie.com/entry/2014/06/16/QNAP%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%A7%8B%E9%80%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)


## あとあんまり関係ない話

QNAP 試しに買ってみたけど、 ssh で接続していじるってなると、慣れてるディストリビューションとかなり構成違うし、インフラ系強い人は、自分で組んだ方がいいのかもと思った。そこまでやる気ないのであれば十分に時間を節約してくれるので、金で時間を買うかんじ。

コンパクトにパーツを組むところから自分で選ぶのがだるいので、買っとくかと思って買ったけど、身近な RedHat系や Debian系とかなり構成違うのでそこそこ学習コストある。そのあたりはトレードオフぽい。

QNAP 買ったあとで、Synology が好評なのを知って、こっちにすれば良かったかもなとちらっと思った。

* [DSM 5.1 - DSM ライブデモ - Synology - ネットワーク接続ストレージ (NAS)](https://www.synology.com/ja-jp/dsm/5.1/live_demo "DSM 5.1 - DSM ライブデモ - Synology - ネットワーク接続ストレージ (NAS)")

用途としては、音楽ファイル、あと以前はイラストレーションやデザインぽい仕事を多くやってて、素材や制作物とかの保管しておくべきデータがサイズでかいので、そういうやつのバックアップ + いちおうすぐアクセスできるようにしとく、みたいなかんじ。

基本的に、あんまり自宅にでかいストレージを抱えて保守していくのは、いまどきあんまりスマートじゃないみたいな気持ちがある。ハッカー気質な人がちゃんと自分で組んで運用してるのはかっこいいなと思うので、そういうのは除くけど。