Arch LinuxのSSHサーバにDropbearを使う

## 概要
Linux環境でSSHサーバといえばOpenSSHになると思いますが、せっかくのArch Linuxで真っ新な状態なので、今回はDropbearを使ってみようと思います。

Dropbearは今まで知らなかったのですが、`pacman -Ss ssh`で見つけて興味をひかれました。

個人的に初物なので設定に時間がかかるかと思いましたが、とても簡単でしたので、とりあえず手っ取り早くSSHデーモンを立てたい場合はDropbearも有力な選択肢かもしれません。

## Dropbearとは

pacmanコマンドで見れる説明は、下記のようになっています。

```
community/dropbear 2017.75-1 [installed]
    Lightweight replacement for sshd
```

OpenSSHの代替となる軽量なSSHサーバ、ということですね。


[公式サイト](https://matt.ucc.asn.au/dropbear/dropbear.html)には、「Dropbear is particularly useful for "embedded"-type Linux (or other Unix) systems, such as wireless routers.」とあり、Raspberry Piで使われたりするようです。

## インストール方法

Arch Linuxのリポジトリに含まれているため、pacmanコマンドでインストールできます。

```
# pacman -S dropbear
```

## 動かす
systemdのユニットファイルもインストール時に入ってくるので、簡単です。

```
# systemctl start dropbear.service
```

ついでに自動起動の設定もします。

```
# systemctl enable dropbear.service
```


## 動作確認

まず、ユーザの公開鍵を設置します。

ここは、OpenSSHを使った場合と変わりません。`~/.ssh/authorized_keys`に設置しましょう。

パーミッションもいつも通り、厳しめにしておいたほうがよいでしょう。つまり、`~/.ssh`は700、`~/.ssh/authorized_keys`は600です。
（authorized_keysが644でも接続できたので、ここのチェックはOpenSSHほど厳密ではないのかもしれません）

あとは、いつも通りの方法で接続してみてください。ポートもいつも通り22です。

## デフォルト設定をカスタマイズ

設定ファイルは無いようですが、基本的な設定は起動コマンドのオプションで指定できます。

デフォルトでは、下記のようになっています。

```
# grep 'ExecStart' /usr/lib/systemd/system/dropbear.service
ExecStart=/usr/bin/dropbear -F -P /run/dropbear.pid -R
```

私は、rootユーザによるログインとパスワード認証でのログインを禁止したかったので、下記のように変更しました。（オプションの意味は後述）

```
# grep 'ExecStart' /usr/lib/systemd/system/dropbear.service
ExecStart=/usr/bin/dropbear -F -P /run/dropbear.pid -R -w -s
```

設定を効かせます。

```
# systemctl daemon-reload
# systemctl restart dropbear.service
```

一行目は、ユニットファイルを修正したときに必要なコマンドです。二行目は、サービスの再起動です。（`reload`はできませんでした。）

`restart`なので、今接続されているSSHコネクションはすべて切断される点に注意してください。

## その他の設定可能な項目

`-h`で確認できます。

```
# dropbear -h
Dropbear server v2017.75 https://matt.ucc.asn.au/dropbear/dropbear.html
Usage: dropbear [options]
-b bannerfile   Display the contents of bannerfile before user login
                (default: none)
-r keyfile  Specify hostkeys (repeatable)
                defaults:
                dss /etc/dropbear/dropbear_dss_host_key
                rsa /etc/dropbear/dropbear_rsa_host_key
                ecdsa /etc/dropbear/dropbear_ecdsa_host_key
-R              Create hostkeys as required
-F              Don't fork into background
-E              Log to stderr rather than syslog
-m              Don't display the motd on login
-w              Disallow root logins
-s              Disable password logins
-g              Disable password logins for root
-B              Allow blank password logins
-j              Disable local port forwarding
-k              Disable remote port forwarding
-a              Allow connections to forwarded ports from any host
-p [address:]port
                Listen on specified tcp port (and optionally address),
                up to 10 can be specified
                (default port is 22 if none specified)
-P PidFile      Create pid file PidFile
                (default /var/run/dropbear.pid)
-i              Start for inetd
-W <receive_window_buffer> (default 24576, larger may be faster, max 1MB)
-K <keepalive>  (0 is never, default 0, in seconds)
-I <idle_timeout>  (0 is never, default 0, in seconds)
-V    Version
```

## 参考文献
 * https://matt.ucc.asn.au/dropbear/dropbear.html