kickstartでVNCを管理するTips


こんにちは、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のコンポーネント

  1. ARD Helper
  2. ARD Agent & associated daemons
  3. ARD Menu Extra (controlled by the SystemUIServer)
  4. 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 ユーザのアクセスを不可にする

5. References