Synology DiskStation で SSH 接続を公開鍵認証方式にする


Synology DiskStation の DiskStation Manager (DSM) のウェブ管理画面で SSH 機能を設定する

Synology DiskStation で SSH を有効にする

DiskStation Manager (DSM) のウェブ管理画面から「コントロールパネル」→「端末とSNMP」→「SSHサービスを有効化する」をクリック

Synology DiskStation でユーザーホームの設定を有効にする

注意:「ユーザーホームのサービスを有効にする」が無効になっていると、後述の /var/services/homes/ ディレクトリにアクセスできないので注意

DiskStation Manager (DSM) のウェブ管理画面から「コントロールパネル」→「ユーザー」→「詳細」→「ユーザーホーム」→「ユーザーホームサービスを有効にする」をクリック

Synology DiskStation に SSH ログインする

注意:SSH/Telnet は、[administrators] グループに属するユーザーでしかシステムにログインできない
注意:root 昇格の方法が DiskStation Manager (DSM) 6.0 以降は admin ユーザーでログイン後、sudo -i コマンドの実行に変更されている

サーバ に SSH ログインする

ローカルマシンのターミナルから、Synology DiskStation の admin ユーザーと DiskStation のサーバ IP アドレス(今回の例では 192.168.1.10 )を指定して SSH ログインする

ローカルマシンのターミナル
### 192.168.1.10 のサーバーに SSH ログインする
$ ssh -p 22 [email protected]
### admin ユーザーのパスワードを入力する
[email protected]'s password: 
### admin ユーザーでログインした状態で sudo -i と入力して root ユーザーに昇格する
[email protected]:/$ sudo -i
### root ユーザーのパスワード( admin ユーザーのパスワードと同じもの)を入力する
Password: 
### 成功するとプロンプトのユーザー表示が admin から root に変わる
[email protected]:~#
### 試しに OpenSSH のバージョンを ssh -V で確認してみる
[email protected]:~# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2r-fips  26 Feb 2019

【作業不要:デフォルト値で設定済み】 サーバの SSH 設定ファイルを編集

$ vim /etc/ssh/sshd_config

sshd_config ファイルの以下の部分のコメント(先頭にある#)を外して、SSHの設定をする

sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

参考資料:manページ — SSHD_CONFIG
参考資料:OpenSSH-7.3p1 日本語マニュアルページ (2016/10/15) SSHD_CONFIG (5)
参考資料:OpenSSH (sshd) のデフォルト値
参考資料:SSH で root のみ公開鍵認証を強制する

秘密鍵・公開鍵を作る

ここでは、ローカルマシン上で、公開鍵・秘密鍵を生成する。ここでは、RSA を 4096bit 、コメントを fugafuga、ファイル名を hogehoge とした

$ ssh-keygen -t rsa -b 4096 -C "fugafuga" -f hogehoge

コマンドを実行すると作業ディレクトリに hogehoge(秘密鍵)とhogehoge.pub(公開鍵)ができる

参考資料:2017年版 SSH公開鍵認証で使用する秘密鍵ペアの作り方

公開鍵を設置する

注意:公開鍵は、/var/services/homes/ 以下のユーザーディレクトリ( SSH ログインしたいユーザー名のディレクトリ)に設置する。 今回、使用するユーザーがuserなので、SSH 設定ファイルは/var/services/homes/user/に設置した。

.sshディレクトリを作り、authorized_keysのファイルを作成する

$ mkdir /var/services/homes/user/.ssh
$ touch /var/services/homes/user/.ssh/authorized_keys

vimauthorized_keys を開き、公開鍵(上記で作成したhogehoge.pubの中身すべて)をコピペする

$ vim /var/services/homes/user/.ssh/authorized_keys

サーバのディレクトリのパーミッションを設定する

注意:パーミッションを正確に設定しないと、SSH ログインができない
参考:公式サイトには .ssh ディレクトリと authorized_keys のパーミッションを700に設定する記述あり
参考:公式サイトには .ssh ディレクトリと authorized_keys の所有者とグループをrootに設定する記述あり

以下は、筆者の設定例

$ chown -R user:users /var/services/homes/user/
$ chmod -R 755 /var/services/homes/user/
$ chmod 700 /var/services/homes/user/.ssh
$ chmod 644 /var/services/homes/user/.ssh/authorized_keys

sshd の設定ファイルの文法チェック

コマンド実行後に何も表示されなければ、文法チェックは正常終了(デバッグ出力をするには sshd -t -d のように -d オプションを指定する)

$ sshd -t

sshd の再起動

注意: synoservicectl --restart sshd は SSH のコネクションがロストする
ロストした場合は、ウェブ管理画面から「SSHサービスを有効化する」のオン→ オフ→ オンで復活できる

$ synoservicectl --reload sshd

ログインのテスト

初回は秘密鍵の指定が必須

$ ssh -i ~/.ssh/hogehoge [email protected]

次回からは秘密鍵の指定は不要

TIPS: ~/.ssh/config を設定すると便利になる

参考資料:~/.ssh/configについて
参考資料:.ssh/configファイルでSSH接続を管理する
参考資料:UseKeychainが設定されているMacのssh configをLinuxで使い回す

以上