Macでのリモートアクション用スクリプトの作成
この記事で説明されている操作の実行に助けが必要な場合は、Nexthink認定パートナーにお問い合わせください。
この記事は、MacにおけるNexthinkリモートアクションスクリプトの準備プロセスについて詳しく説明しています。 スクリプトは、Unix系の多くのオペレーティングシステムでサポートされているコマンドラインシェルおよびスクリプティング言語であるBashで書かれた後、セキュリティーのために証明書で署名されます。 Bashスクリプトはタスクや構成管理の自動化に適しています。これにより、従業員のデバイスでリモートアクションを実行できます。
リモートアクションの主なユースケースは、デバイスからのオンデマンドデータ収集、セルフヒーリングタスク、および構成設定の変更です。
この記事は、読者がBashスクリプティングに精通していることを前提としています。
詳細については、Remote Actionsグループのコミュニティのドキュメントを参照してください。
スクリプトの作成
一般的なスクリプトと入力変数
デジタル署名されたスクリプトにカスタマイズが必要なとき、一般的なスクリプトが役立ちます。署名されたスクリプトを変更すると、その署名が無効になります。 一般的なスクリプトはパラメータでカスタマイズでき、署名が保たれます。
スクリプトの冒頭でパラメータを宣言し、Bashの位置パラメータとして次のように2つの特別なコメントの間に挿入します:
リモートアクションの設定中にスクリプトをアップロードすると、システムはBashスクリプト内の特別なNexthinkのコメント間にあるパラメータを取得して、スクリプトテキストの下のパラメータセクションにリストします。 各パラメータ名の右側に表示されたテキスト入力ボックスに、実際の値を提供してください。
実際の値は常にテキストとしてスクリプトに渡されます。 スクリプトがstring以外の型でパラメータを宣言している場合は、スクリプトが期待する型に変換できる値を提供してください。
アウトプット変数の作成
スクリプトを実行すると、オンデマンドデータとして保存したいアウトプットが生成されることがあります。 Nexthinkは、Collectorと同時に従業員デバイスにインストールされるBashスクリプト(nxt_ra_script_output.sh
)を提供しています。 このスクリプトには、結果をデータレイヤーに書き込むための関数が含まれています。
リモートアクションのアウトプットにNexthinkスクリプトの関数を使用するには、Bashスクリプトの最初に以下のヘッダーを追加してください。
すべての書き込み方法は、アウトプット名と書き込む値の2つの引数を受け入れます。 例えば、ディレクトリ内のファイル数をデータレイヤーに返したい場合、スクリプト内の変数nfiles
にその数が含まれます。 nfiles
の値をFileNumber
というアウトプット名でデータレイヤーに書き込むには、符号なし整数の書き込み関数を呼び出してください。
リモートアクションエディタは、スクリプト内のアウトプットの書き込み呼び出しを認識し、アウトプット変数をアウトプットセクションに一覧表示します。 アウトプットのラベルを設定して、調査やメトリクスでどのように参照するかを示してください。
各write
メソッドの終了はアウトプットの種類を示します。 Bashは、緩やかに型付けされた言語であるため、アウトプットの種類は文脈によって解釈されます。 利用可能なメソッドの一覧は次のとおりです。
nxt_write_output_string
0 - 1024文字(アウトプットが大きい場合は切り詰められます)
nxt_write_output_bool
true / false
nxt_write_output_uint32
最小値: 0
最大値: 4 294 967 295
nxt_write_output_float
最小値: -3.4E+38
最大値: 3.4E+38
nxt_write_output_size
最小値: 0
最大値: 3.4E+38
nxt_write_output_ratio
nxt_write_output_bitrate
nxt_write_output_duration
最小値: 0ミリ秒
最大値: 49日
ミリ秒単位の精度
nxt_write_output_date_time
DD.MM.YYYY@HH:MM
nxt_write_output_string_list
0 - 1024文字(アウトプットが大きい場合は切り詰められます)
キャンペーンの実装
従業員が独自に問題を解決できるよう、リモートアクションとキャンペーンを組み合わせましょう。 キャンペーンを使用して、従業員に問題の検出を通知し、その解決に向けて誘導します。
デバイスとやり取りしている従業員のデスクトップにキャンペーンを表示するには:
キャンペーンはリモートアクショントリガーを持ち、公開されなければなりません。
リモートアクションのスクリプトは以下のいずれかで実行できます。
特別な権限を必要としないアクションの場合、従業員のコンテクストで。
管理者特権を必要とするアクションの場合、ローカルシステムアカウントのコンテクストで。
キャンペーン識別子の取得
リモートアクションからキャンペーンを実行するメソッドでは、引数としてキャンペーン識別子を渡す必要があります。 キャンペーンNQL ID(推奨)とキャンペーンUID(クラシックオプション)の両方を使用できます。
リモートアクションにキャンペーン識別子を渡すには、必要なキャンペーンごとにリモートアクションのスクリプトでパラメータを宣言します。 リモートアクションを編集するときに、実際の値としてNQL ID(またはUID)を使用します。
キャンペーンのNQL IDやUIDを取得する方法については、キャンペーンのトリガー のドキュメントを参照してください。
リモートアクションのスクリプトからキャンペーンを実行する
次の関数はリモートアクションのスクリプト機能を拡張します。
この関数は、引数として渡されたNQL ID(推奨)またはUIDに一致するキャンペーンを実行し、解答を内部に保存します。
キャンペーンのステータスを受信した場合、関数は0を返します。
その他のケースでは関数は1を返し、エラーはログに記録されます。
この関数を呼び出すと、従業員がキャンペーンを完了するか、却下するまでリモートアクションの実行が一時停止されます。
この関数は、引数として渡されたNQL ID(推奨)またはUIDとタイムアウト(秒単位: 0 < T < 1 週間)に一致するキャンペーンを実行し、解答を内部に保存します。
キャンペーンのステータスを受信した場合、関数は0を返します。
その他のケースでは関数は1を返し、エラーはログに記録されます。
この関数を呼び出すと、従業員がキャンペーンを完了するか却下するか、タイムアウト前にキャンペーンを完了できなかった場合までリモートアクションの実行が一時停止されます。
この関数は、引数として渡されたNQL ID(推奨)またはUIDに一致するキャンペーンを実行し、解答を内部に保存します。
キャンペーンのステータスを受信した場合、関数は0を返します。
その他のケースでは関数は1を返し、エラーはログに記録されます。
この関数を実行すると、キャンペーンの開始がトリガーされ、従業員の回答を待たずにリモートアクションの実行が続行されます。
この関数は、最後のキャンペーンのステータスを返します。
完全: 従業員がキャンペーンの質問に完全に回答しました。
タイムアウト: ユーザーが回答を終える前にキャンペーンがタイムアウトしました。
延期: 従業員がキャンペーンへの参加に同意しました。
拒否: 従業員がキャンペーンへの参加を拒否しました。
接続失敗: スクリプトがキャンペーン通知を制御するCollectorコンポーネントに接続できませんでした。
通知失敗: スクリプトがキャンペーンを正常に表示できなかった理由は次のいずれかです。
プラットフォームからのキャンペーン定義を取得できない非存在キャンペーンまたは公開されていないキャンペーン。
別のキャンペーンが既に従業員に表示されています。
Collectorの集中保護または「邪魔しないで」ルールのために急を要しないキャンペーンを表示できません。 詳細については、キャンペーンの受信率を制限する方法のドキュメントを参照してください。
最後のキャンペーンが失敗した場合は空白になります。
質問ラベルを文字列パラメータのクエリ_keyとして使用して、最後のキャンペーンに問い合わせます。 この関数は文字列値として回答を抽出し、指定された変数res_varに保存します。
キャンペーンのステータスを受信した場合は0を返します。
その場合は1を返します。
スクリプトのエンコード
リモートアクション用Bashスクリプトを書くには:
スクリプトを含むファイルをBOMなしのUTF-8でエンコードします。
コードの各行は、UNIXシステムの通常の文字
LF
で終了します。
エンコードを正しく行い、エラーや機能しないスクリプトを避けてください。
コード例
スクリプトの署名
セキュリティ上の理由から、NexthinkはmacOSでのリモートアクション用Bashスクリプトをcodesign
ツールでデジタル署名することを求めています。 署名済みスクリプトをtar.gz
ファイルとしてパッケージ化し、拡張属性を保持してください。 Nexthink web インターフェースは、macOSを対象としたリモートアクションのスクリプトをインポートする際、tar.gz
拡張子のファイルのみを受け付けます。
Nexthinkは、実稼働環境でのすべてのスクリプトの署名を推奨しています。 署名のないスクリプトはテスト環境でのみ使用するべきです。
証明書の作成
Macデバイスでキー チェーンアクセスを起動します。
キー チェーンアクセス > 証明書アシスタント > 証明書を作成… に移動します。
証明書名を入力してください。
証明書の種類としてコード署名を選択してください。
テスト目的の場合、デフォルトの上書きを許可するのチェックを外したままにしておくことができます。
作成および完了をクリックしてください。 システムが証明書を生成しました。
署名
標準macOSコードサインユーティリティを使用してリモートアクションスクリプトに署名します。
パラメータ:
コード署名証明書のアイデンティティはキーチェーン内にあります。 通常、これは証明書主題の共通名または証明書のハッシュです。 詳細については、codesignマニュアルページを参照してください。
署名の信頼できるタイムスタンプ。
コード署名識別子へのプレフィックス。 企業のアイデンティティを識別子に付加し、識別子をユニークにするのに役立ちます。 コード署名識別子生成規則については、UNIXのcodesignマニュアルページを参照してください。
既存のコード署名を上書きすることを強制します。
例
example_ra_script.sh リモートアクションスクリプトのテスト証明書の例:
スクリプトファイルの署名は、ファイルに関連付けられたファイルシステムの拡張属性で生成されます。 コードサインの詳細を取得し署名を検証するためにcodesignユーティリティを使用してください。
パッケージング
.tarアーカイブと.gzip圧縮を用いてリモートアクションスクリプトをパッケージ化してください。 ".tar.gz"拡張子は必須です。
スクリプトファイルが署名されている場合、tarユーティリティはその拡張属性もパックします。 この方法で、システムはコード署名とスクリプトファイルを転送できます。
制限事項
一つのアーカイブには一つのスクリプトしか入れられません。
スクリプトファイルはルートパッケージフォルダに配置する必要があります。
./myscript/myscript.sh
パスは正しくありません。スクリプトは.sh拡張子を持っていなければなりません。
スクリプトファイル名はUTF-8エンコードである必要があります。これはmacOSでデフォルト設定です。
例
test.sh
スクリプトのパッケージ化の例:
生成された example_ra_script.tar.gz
はリモートアクションスクリプトファイルです。
Nexthinkは署名とパッケージ化のプロセスを簡素化するために、このスクリプトを使用することを推奨しています。
証明書をendpointにデプロイする
キーチェーンにコード署名証明書がある場合、その公開バージョンをendpointにインストールするためには、まずエクスポートする必要があります。
ポップアップウィンドウで公開証明書用に 証明書 (.cer) ファイル形式を選択します。
証明書をendpointのキーチェーンにインポートする
署名済みの証明書をSystemキーチェーンにインポートして、Trusted Publisher 実行ポリシーを使用してリモートアクションスクリプトを使用します。
.cerファイルをダブルクリックし、キーチェーンのドロップダウンメニューでシステムオプションを選択します。
証明書をインポートするためにルートパスワードを入力してください。
証明書が自己署名の場合、コード署名のために信頼されるべきです。
キーチェーンアクセスユーティリティの証明書をダブルクリックし、コード署名オプションで常に信頼を選択してください。
これらの作業を自動化するために、セキュリティユーティリティ(外部リンク)または自動化フレームワークを使用してください。
証明書が正しくendpointにインポートされたか確認する
署名済みのリモートアクションスクリプトをendpointにコピーして解凍してください。
あなたの署名を確認してください。
署名が正しくインポートされている場合、次の出力が表示される必要があります:
スクリプトの保守
比較と検証
リモートアクションスクリプトを展開する前に、Nexthinkが準備した他のスクリプトと比較することができます。 このステップはオプションですが、初めてスクリプトを準備する場合は推奨されます。
Nexthink Libraryで、コンテンツを選択してください。
リモートアクションでフィルタリングします。
リモートアクション管理ページに移動してください。
Nexthink Library から直接インストールされたリモートアクションスクリプトの中で、ターゲットオペレーティングシステムに一致するものを選択してください。
スクリプトをエクスポートし、その構文を自分のスクリプトと比較してください。
スクリプトの終了とタイムアウト
リモートアクションスクリプトからサブプロセスを開始し、リモートアクションスクリプトが終了またはタイムアウトすると、Collectorはサブプロセスを自動的に終了します。 リモートアクションが終了した後もサブプロセスを実行し続けるには、&文字を使用してスクリプトがサブプロセスをデタッチすることを確認してください。例:
Zshコマンドインタープリタ
Collectorバージョン6.27.2以降では、Zsh Unixシェル用に書かれたスクリプトを実行できます。 シェルスクリプトの一番最初に以下の行を追加する必要があります:
これはシバンと呼ばれる文字列です(シバンとは(外部リンク))。
システムがMac上でリモートアクションを実行すると、Collectorはコードの最初の行をチェックし、指定されたインタープリタを使用して残りの指示を実行します。 シバンのないスクリプトは、Bashコマンドインタープリタを使って実行されます。
Nexthinkは常にシェルスクリプトにシバンを使用し、標準インタープリタに従うことを推奨しています。
Last updated