Mac miniを自宅サーバ化するためにスリープ無効化・SSH鍵認証・UPS復旧設定を行う

Mac miniを自宅サーバ化するためにスリープ無効化・SSH鍵認証・UPS復旧設定を行う

自宅サーバ用途でMac miniを使う場合、通常のデスクトップ利用とは違い、勝手にスリープしたり、停電復旧後に起動しない状態になると困ります。

今回は、Mac miniをSSHで管理できる常時稼働マシンとして使うために、以下の設定を行いました。

  • Mac miniのスリープ無効化
  • ディスプレイ・ディスクスリープの無効化
  • SSH鍵認証の設定
  • パスワードSSHログインの無効化
  • 停電復旧時の自動起動設定
  • UPS運用を前提にした復旧設定

前提

Mac miniには、手元のMacから以下のようにSSH接続できる状態にしてあります。

ssh snowpool@mac-mini

ユーザー名は snowpool、ホスト名は mac-mini としています。

Mac miniのスリープを無効化する

まず、Mac miniへSSH接続します。

ssh snowpool@mac-mini

接続後、以下のコマンドを実行します。

sudo pmset -a sleep 0 displaysleep 0 disksleep 0

各設定の意味は以下の通りです。

  • sleep 0:本体をスリープさせない
  • displaysleep 0:ディスプレイを自動でオフにしない
  • disksleep 0:ディスクを停止させない

設定後、以下のコマンドで現在の電源設定を確認します。

pmset -g

実行結果は以下のようになりました。

System-wide power settings:
Currently in use:
 standby              0
 Sleep On Power Button 1
 autorestart          1
 powernap             1
 networkoversleep     0
 disksleep            0
 sleep                0 (sleep prevented by powerd)
 ttyskeepawake        1
 displaysleep         0
 tcpkeepalive         1
 powermode            0
 womp                 1

pmsetの確認ポイント

今回重要なのは、以下の項目です。

standby              0
disksleep            0
sleep                0
displaysleep         0
autorestart          1
womp                 1
ttyskeepawake        1
tcpkeepalive         1

本体スリープ・ディスプレイスリープ・ディスクスリープ

disksleep            0
sleep                0
displaysleep         0

この3つが 0 になっていれば、主要なスリープ設定は無効化できています。

  • 本体スリープ:無効
  • ディスプレイスリープ:無効
  • ディスクスリープ:無効

また、以下のように表示されています。

sleep                0 (sleep prevented by powerd)

これは、macOSの電源管理プロセスである powerd が、スリープを抑止している状態です。

スタンバイ設定

standby              0

standby0 のため、スタンバイにも移行しない設定になっています。

停電復旧時の自動起動

autorestart          1

autorestart1 になっていれば、電源障害から復旧したときに自動起動する設定が有効です。

自宅サーバ用途では重要な項目です。

Wake on LAN

womp                 1

womp は Wake on LAN に関係する設定です。

SSHサーバとして使う場合、ネットワーク経由で起こせる可能性があるため、有効で問題ありません。

SSH接続中にスリープしない設定

ttyskeepawake        1

ttyskeepawake1 になっているため、SSHやターミナル接続がある間はスリープしない状態になります。

TCP KeepAlive

tcpkeepalive         1

tcpkeepalive1 になっているため、SSHなどのネットワーク接続維持に有利です。

SSH鍵認証を設定する

次に、SSHログインをパスワード認証ではなく、鍵認証に変更します。

すでにAWSやGMO VPSなどでSSHキーを使っているため、既存の鍵と混ざらないように、Mac mini専用のSSH鍵を作成します。

  • Mac mini専用のSSH鍵を新規作成する
  • 鍵ファイル名で用途を明確にする
  • ~/.ssh/config で接続時に自動で鍵を切り替える

これにより、既存のAWSやGMO VPS環境には影響を与えずにMac mini専用のSSH鍵を使えます。

Mac miniから一度ログアウトする

SSH鍵は手元のMac側で作成するため、Mac miniから一度ログアウトします。

exit

Mac mini専用のSSH鍵を作成する

手元のMacで、以下のコマンドを実行します。

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_macmini_home -C "macmini-home"

鍵ファイル名は以下にしました。

id_ed25519_macmini_home

途中で以下のようにパスフレーズを聞かれます。

Enter passphrase (empty for no passphrase):

今回は自宅内のサーバ用途で、自動接続しやすくするため、空Enterにしました。

作成後、以下のコマンドで鍵ファイルを確認します。

ls ~/.ssh/id_ed25519_macmini_home*

以下の2つが作成されていればOKです。

/Users/snowpool/.ssh/id_ed25519_macmini_home
/Users/snowpool/.ssh/id_ed25519_macmini_home.pub
  • id_ed25519_macmini_home:秘密鍵
  • id_ed25519_macmini_home.pub:公開鍵

秘密鍵は外部に出さないようにします。

Mac miniに公開鍵を登録する

次に、作成した公開鍵をMac miniへ登録します。

ssh-copy-id -i ~/.ssh/id_ed25519_macmini_home.pub snowpool@mac-mini

このとき、Mac miniのログインパスワードを聞かれるので入力します。

これで、手元のMacの公開鍵がMac mini側の ~/.ssh/authorized_keys に登録されます。

ssh-copy-id が使えない場合

macOS環境によっては ssh-copy-id が入っていない場合があります。

その場合は、以下のように公開鍵を手動で登録できます。

cat ~/.ssh/id_ed25519_macmini_home.pub | ssh snowpool@mac-mini 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'

SSH configを設定する

毎回鍵ファイルを指定するのは面倒なので、手元のMac側で ~/.ssh/config を設定します。

vim ~/.ssh/config

以下を追記します。

Host mac-mini
    HostName mac-mini
    User snowpool
    IdentityFile ~/.ssh/id_ed25519_macmini_home
    IdentitiesOnly yes

これで、以下のように短いコマンドで接続できます。

ssh mac-mini

パスワードを聞かれずにログインできれば、SSH鍵認証の設定は成功です。

パスワードSSHログインを無効化する

鍵認証でログインできることを確認したら、次にパスワードSSHログインを無効化します。

注意点として、必ず先に別ターミナルで ssh mac-mini による鍵ログインが成功することを確認してから作業します。

確認しないままパスワード認証を無効化すると、設定ミスがあった場合にSSHで入れなくなる可能性があります。

Mac mini側で、SSH設定ファイルを編集します。

sudo vim /etc/ssh/sshd_config

以下の行を探します。

#PasswordAuthentication yes

これを以下のように変更します。

PasswordAuthentication no

保存後、リモートログインを一度OFFにしてからONにします。

sudo systemsetup -setremotelogin off
sudo systemsetup -setremotelogin on

macOSでは、これをsshd再起動の代替として使えます。

これで、鍵を持っている端末以外からはSSHログインできない状態になります。

接続確認

手元のMacから、以下で接続できるか確認します。

ssh mac-mini

パスワードなしでログインできればOKです。

また、鍵を指定しない接続や、鍵を持たない端末からのパスワードログインはできなくなります。

UPS運用に向けた自動起動設定

次に、UPS運用を想定して、停電復旧時にMac miniが自動起動するように設定します。

まず、現在のAutoBoot設定を確認します。

nvram -p | grep AutoBoot

何も表示されない場合は、AutoBootが明示的には設定されていない状態です。

以下のコマンドを実行します。

sudo nvram AutoBoot=%03

再度確認します。

nvram -p | grep AutoBoot

以下のように表示されれば設定できています。

AutoBoot	%03

AutoBoot=%03 の意味

この設定は、簡単に言うと以下の意味です。

電源が復旧したら、自動でMacを起動せよ。

nvram は、NVRAMを操作するコマンドです。

  • NVRAMは Non-Volatile RAM の略
  • 電源を切っても設定が保持される
  • macOSが起動する前の段階から有効

OS側の設定というより、Mac本体のファームウェア設定に近いレイヤです。

AutoBoot

AutoBoot は、Appleが用意している起動制御用の変数です。

名前の通り、自動起動に関係します。

%03 の意味

AutoBoot の値はビットフラグとして扱われます。

意味
%00 自動起動しない
%01 電源接続時に起動
%02 蓋開閉など、特定条件で起動
%03 自動起動条件を有効化

%030b11 に相当し、自動起動に関する条件を有効化する設定です。

macOSのGUI設定との関係

macOSのGUIには、電源障害後に自動的に再起動する設定があります。

内部的には、この AutoBoot に関連する設定が使われます。

ただし、GUI設定が反映されない場合や、確認しづらい場合があります。

そのため、サーバ用途ではCLIから明示的に設定しておくと安心です。

AutoBootを戻したい場合

自動起動を無効化したい場合は、以下を実行します。

sudo nvram AutoBoot=%00

これで、自動起動しない設定に戻せます。

今回の設定まとめ

今回の設定により、Mac miniは以下の状態になりました。

  • 本体スリープしない
  • ディスプレイも自動スリープしない
  • ディスクも停止しない
  • SSH鍵認証でログインできる
  • パスワードSSHログインは無効
  • 停電復旧時に自動起動する
  • Wake on LANも有効

注意点

パスワードSSHを無効化する前に、必ず鍵認証でログインできることを確認します。

特に、以下の確認は重要です。

  • 別ターミナルで ssh mac-mini が成功するか
  • ~/.ssh/configIdentityFile が正しいか
  • Mac mini側の authorized_keys に公開鍵が登録されているか
  • Mac mini側のリモートログインが有効になっているか

また、UPSを使う場合でも、バッテリー切れで完全停止した後に電源が戻るケースを想定して、自動起動設定を入れておくと安心です。

まとめ

Mac miniを自宅サーバとして使う場合、スリープ無効化とSSH鍵認証はほぼ必須です。

特に、自宅内で常時稼働させるRAGサーバ、ローカルLLM、ファイルサーバ、監視用スクリプト、定期実行ジョブなどを動かす場合、勝手にスリープされると運用が不安定になります。

今回の設定で、Mac miniは「SSHで安全に管理でき、停電復旧後も自動で戻ってくる常時稼働マシン」に近づきました。

一言で言えば、以下の状態です。

電源さえ戻れば、Mac miniは自動で立ち上がり、SSH鍵を持つ端末からだけ管理できる。

自宅サーバ用途では、この状態にしておくとかなり安心です。

コメント

タイトルとURLをコピーしました