こんにちは、iOSエンジニアの paper_and_paper です。
先日、いよいよAWS EC2でも Macインスタンス を立てれるようになると発表されました。
Amazon EC2 Mac Instances👏👏
EC2上でMacを使えるようになると、ビルド、テスト、署名などのXcodeが必要な作業をAWS上でもできるようになるため、CI/CDやビルド・署名作業などはもちろん、開発環境ごとにインスタンスを立ち上げることも容易になりそうですね。
SSHまたはリモートデスクトップ(VNC)を用いて操作を行うことが可能なようで、間もなくmacOS Big Sur11.0のサポートも間もなく開始されるようです。
物理マシンを購入するという選択に加えて、クラウド上でビルドやテストを走らせるという選択が増えるのは嬉しい限りです。
1. Apple Remote Desktop
さて、テストやビルドのために専用マシンを導入するとなると、マシンのメンテナンスや開発環境のアップデートするにはSSHやVNCが非常に活躍します。Macには Screen Sharing (画面共有) が標準で装備されています。GUI上では追加インストールしなくとも大抵の操作ができるため、もちろん VNC でリモートアクセスしてXcodeやコマンドツールをインストールすることができます。
このようなMacのリモート操作を担っているのが Apple Remote Desktop (ARD) というアプリケーションです。
1-1. Apple Remote Desktop で kickstart コマンドラインを使う
Apple Remote Desktop のコンポーネントをインストールしたり、アンインストール、起動、設定、再起動するために kickstart
というコマンドが提供されています。
kickstartコマンドは以下のパスに配置されています。
/System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart
ARDとは Apple Remote Desktop の略称で、Macに標準インストールされているCoreService アプリケーションの1つです。Apple Remote Desktop Client の一部となっています。
1-2. ARDのコンポーネント
- ARD Helper
- ARD Agent & associated daemons
- ARD Menu Extra (controlled by the SystemUIServer)
- ARD Admin Console (if you have an Administrator license)
1-3. リモートマネージメントは画面共有より優先される
基本的にGUI上で画面共有を利用しているときは、リモートマネージメントは無効になっています。
早速、SHHでログインしてARDを起動してみましょう。
i. 有効化する
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate
Starting...
Warning: macos 10.14 and later only allows control if Screen Sharing is enabled through System Preferences.
Activated Remote Management.
Done.
GUI上で「システム設定」を確認してみると Remote Management にチェックが付いたのを確認できます。
Remote Managementを有効になると、画面共有は「切」に変更されて変更不可能な項目になりました。
ii. 無効化する
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate
Starting...
Removed preference to start ARD after reboot.
Done.
次は Remote Management のチェックが外れました。
リモートマネージメント起動後に停止してしまった「画面共有」は、リモートマネージメントを停止させても画面共有はONにもどらないので注意です。
2. kickstartコマンドで何ができるのか
2-1. 権限を付与する
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -allowAccessFor -allUsers -privs -all
Starting...
Setting allow all users to YES.
Setting all users privileges to 1073742079.
Done.
2-2. VNCユーザを許可する
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -clientopts -setvnclegacy -vnclegacy yes
Starting...
Set the client options.
Done.
2-3. VNCパスワードを設定する
-vncpw
オプションに続けてパスワードを追加します。(""で囲む必要はありません)
Rootパスワードと同じにならないフレーズを使用しましょう。
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -clientopts -setvncpw -vncpw {_PASSWORD_}
Starting...
Set the client options.
Done.
2-4. ARDを再起動する
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -restart -agent -console
Starting...
Stopped ARD Agent.
Stopped VNC Privilege Proxy
Stopped RFB Register MDNS
Done.
2-5. ARDを有効にする
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate
Starting...
Activated Remote Management.
Done.
3. VNCを特定ユーザのみに制限したい
3-1. Remote Desktop 共有を有効にし、特定のユーザにアクセス権を許可する
ARDを有効化する際に、特定ユーザにのみアクセス権限を付与する -allowAccessFor
オプションに -specifiedUsers
を指定します。
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -specifiedUsers
次に、どのユーザにアクセスを認めるかを具体的に指定します。 別のコマンド -configure
、-access
、-privs
オプションを使い、特定のユーザと、各自に割り当てるアクセス権を指定します。
例えば、以下のコマンドは、ショートネームが「santa」と「tonakai」のユーザについて指定したものです。
該当するユーザに、監視 (制御ではない) し、テキストメッセージを送信する権限を与えています。
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
-configure \
-users santa,tonakai \
-access -on \
-privs -ControlObserve -ObserveOnly -TextMessages
注意すべき点として、kickstart のほかのオプションとは異なり、 allowAccessFor オプションはほかの kickstart オプションと組み合わせるができない ということです。 直前の2つの例のように使う必要があり、
コンピュータの設定を終わらせるまでは、状況に応じて、 kickstart
を複数回呼び出す必要があります。
3-2. 特定のユーザ (「tonakai」) のアクセス権を無効にしたい
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
-configure \
-users tonakai \
-access -off
もしも対象のユーザを指定しなかった場合には、全てのユーザ** に対していデフォルトで適用されます。
4. VNCをON/OFFする
4-1. VNCを有効にする
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
-activate \
-configure \
-access -on \
-clientopts -setvnclegacy -vnclegacy yes \
-clientopts -setvncpw -vncpw __my_passeord__ \
-restart -agent \
-privs -all
-
-activate
Remote Management service を有効化する -
-configure
設定を変更するオプション-
-access
ユーザに対するアクセス設定-
-on
ユーザのアクセスを可能にする
-
-
-clientopts
設定オプション-
setvnclegacy
VNC Legacy password mode を許可する-
-vnclegacy
yes/no を切り替える
-
-
-
-clientopts
-
-setvncpw
VNC Legacy PW をセットする-
-vncpw
パスワードを指定する
-
-
-
-
-restart
再起動を指定するオプション-
-agent
ARD Agent と helper を再起動する
-
-
-privs
ユーザにアクセス権限を付与するためのオプション-
-all
全ての権限を付与する
-
4-2. VNCを無効にする
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
-deactivate \
-configure \
-access -off
-
-deactivate
Remote Management service を無効化する -
-configure
設定を変更するオプション-
-access
ユーザに対するアクセス設定-
-off
ユーザのアクセスを不可にする
-
-