1

秘密鍵を使用してページェント(Windows SSH認証エージェント)をロードするPowerShellスクリプトを作成しました。要するに、スクリプトは次の2行をはるかに超えるものではありません。

$tool = "pageant.exe"
&$tool $files.ToArray()

$filesロードする必要のあるすべての秘密鍵を含む文字列のリストです。

PowerShellコンソールからこれを実行するとスクリプトが完全に機能するため、スクリプトの動作に問題はありません。

アカウントにログオンするたびにこのスクリプトを実行したいのですが、グループポリシーエディター(gpedit.msc)を使用してPowerShellログオンスクリプトグループポリシーを追加することでこれを実行します。スクリプトも実行され、実際にはpageant.exeツールが読み込まれます。

ただし、pageant.exeツールを使用するツール(puttyおよびplink)は機能しません。ページェント認証エージェントを認識しません。

だから私の最初の質問は、自分のPowerShellコンソールからスクリプトを開始することと、グループポリシー(ログオンスクリプト)からスクリプトを開始することの違いは何ですか?

私もいくつかの調査を行っていますが、いくつかの違いがあります。1つ目は、自分のコンソールからスクリプトを開始すると、開始されたページェントツールのタスクマネージャーにUAC仮想化フラグが設定されていることです。このプロパティは、ログオンスクリプトグループポリシーから開始されたときにフラグが立てられません。

2つ目は、UACを無効にすると、ログオンスクリプトグループポリシーからスクリプトが機能することです。したがって、UACと関係があると思いますが、これを解決する方法がわかりません。UACが有効になっている場合にもスクリプトを機能させたい。

2番目の質問は、このUAC仮想化フラグとは何ですか?それはプロセスの動作にどのように影響しますか?3番目で最後の質問は、スクリプトを機能させるにはどうすればよいですか?

4

3 に答える 3

2

物事はUAC仮想化であるように見えます。このフラグは、保護されたシステム領域へのすべての書き込み試行が、ユーザーのプロファイルのVirtualStoreにリダイレクトされることを意味しますC:\Users\<username>\AppData\Local\VirtualStore。UACが無効になっている場合、このリダイレクトはオフになります。

UACが有効になっている場合、たとえば、プログラムファイルに書き込もうとすると、VirtualStore内の対応するディレクトリにリダイレクトされます。後でプログラムがファイルを読み取ると、リダイレクトされたディレクトリからもファイルが表示されます。

ただし、ログオンスクリプトは仮想化を有効にせずに実行されるため、ファイルの変更/読み取りの試行は、リダイレクトされたVirtualStoreではなく、プログラムファイルに直接送信されます。

したがって、仮想化されたディレクトリなしですべてのパーティを機能させる必要があります。実行可能ファイルにマニフェストがあり、できればWindows 7との互換性を宣言している場合、仮想化はオフになります。ただし、プログラムファイルに書き込もうとすると、仮想化なしでは正しく機能しない可能性があります。

注:HKLMへのレジストリ書き込みも仮想化されます。

于 2011-11-26T19:53:27.577 に答える
1

UAC仮想化をオフにする方法はいくつかあります。最も簡単なのは、exeと同じフォルダーに外部マニフェスト(この場合はpageant.exe.manifestという名前になります)を含めることです。これにより昇格が抑制される可能性がありますが、書き込みはおそらく失敗します。仮想化がユーザーに影響を与えているという事実は、pageant.exeが保護された領域に書き込む必要があることを意味し、仮想化または昇格がないと、アクセスが拒否されます。

したがって、私が行うことは、グループポリシーを除外することです。ログオン時に実行されるスケジュールされたタスクを設定し([スタート]をクリックし、[タスク]と入力してタスクスケジューラを起動し、右側にある[タスクの作成]をクリックします)、スクリプトを実行します([トリガー]タブ、[新規]をクリックし、上部のドロップダウンを変更します)。新規)、昇格して実行されます([全般]タブ、[最高の権限で実行]をオンにします)。昇格されたタスクを設定するには、UACに一度同意する必要があります。これで完了です。pageant.exeは、他のアプリが読み取ることができる保護された領域に書き込みます。

この設定を行った後も、他の​​アプリが実際のアプリではなく仮想ストアから読み取りを続ける場合は、仮想ストア内のファイル/フォルダーを削除するだけです。

于 2011-11-28T17:25:35.650 に答える
0

完全を期すために、私は自分の質問に対する回答を追加しました。

  1. 自分のPowerShellコンソールからスクリプトを開始することと、グループポリシー(ログオンスクリプト)からスクリプトを開始することの違いは何ですか?

    A:違いは、私のユーザーが管理者グループの一部であり、昇格された権限でスクリプトを実行するという事実にあります。管理者としてログオンすると、Windowsは標準のユーザーアクセストークンと管理者アクセストークンを生成します。最後のトークンは、昇格された権限を持つプログラムを実行するために使用されます(これはUAC仮想化なしです)。これで、標準のアクセストークンで開始された独自のPowerShellコンソールからスクリプトを開始すると、開始されたページェントがUAC仮想化で実行されます。ページェントを使用するツールが別のモードで実行される場合、私の問題が発生します。

  2. このUAC仮想化フラグとは何ですか?また、プロセスの動作にどのように影響しますか?

    A:このリンクをチェックしてください。

  3. スクリプトを機能させるにはどうすればよいですか?

    A:Kate Gregoryが提供するソリューションを使用するか(最高の特権オプションで実行をチェックしないでください)、PowerShellスクリプトを実行するスタートアップフォルダーにバッチファイルを追加できます。これにより、標準のユーザーアクセストークンとUAC仮想化が有効になっているスクリプトが実行されます。

于 2011-11-28T20:10:50.363 に答える