macOS でソフトウェア・アップデートをすると sshd の設定が既定値に戻ってしまうことがあるようだ。
これは大きな問題で、外部から ssh を接続するにあたりパスワード認証を無効化していても、それが上記の原因のため有効な状態に戻ってしまう。
この問題を回避するためには、定期的に /etc/ssh/sshd_config をチェックし、以下の設定となっていることを確認する必要がある。
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
Mac では sshd に関する一部の設定のみ、このように sshd_config に依存している。
その設定ファイルがいつのまにか既定値に戻ってしまうというのは恐ろしいことだ。
なお、たとえばポート番号のような設定はこのファイルに依存していない。
macOS で外部から接続する ssh のポート番号を変えたい場合は次のようにする。
1) カスタム plist の編集
まずカスタム plist を用意する。 /Library/LaunchDaemons/ssh2.plist を作成する。
なお 99999 のところは任意のポート番号を指定する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.openssh.sshd2</string>
<key>Program</key>
<string>/usr/libexec/sshd-keygen-wrapper</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sshd</string>
<string>-i</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>99999</string>
<key>Bonjour</key>
<array>
<string>ssh</string>
<string>sftp-ssh</string>
</array>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
<key>Instances</key>
<integer>42</integer>
</dict>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
<key>POSIXSpawnType</key>
<string>Interactive</string>
</dict>
</plist>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.openssh.sshd2</string>
<key>Program</key>
<string>/usr/libexec/sshd-keygen-wrapper</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sshd</string>
<string>-i</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>99999</string>
<key>Bonjour</key>
<array>
<string>ssh</string>
<string>sftp-ssh</string>
</array>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
<key>Instances</key>
<integer>42</integer>
</dict>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
<key>POSIXSpawnType</key>
<string>Interactive</string>
</dict>
</plist>
2) plist の再ロード
次のコマンドを投入。
sudo launchctl unload -w /Library/LaunchDaemons/ssh2.plist && sudo launchctl load -w /Library/LaunchDaemons/ssh2.plist
これで良い。デフォルトの共有設定は切っておく。
対策としては sshd_config のバックアップを控えておき、既定値に戻ってしまっていたら上書きするくらいのものだろうか。