Windows PowerShell: 次ホップを実行する

Windows PowerShell リモート処理では、厄介な状況に直面することがあります。ホップする回数に注意してください。

Don Jones

Windows PowerShell リモート処理は、1 台のコンピューターを管理しているかのように複数のリモート コンピューターを簡単に管理できる優れた機能です。この機能はドメイン環境で簡単に動作します。そうは言っても、あなたを本当に困惑させる可能性がある注意点がいくつかあります。このような注意点の 1 つが "次ホップ" です。

リモート処理が特に優れているのは、Kerberos 認証プロトコルなど、特定の Windows テクノロジと適切に統合することです。リモート コマンドの許可および実行が可能な以前のツールとは異なり、リモート処理は、 強力な LocalSystem アカウントで実行されません。その代わり、接続時に Windows 資格情報 (ログオン時に使用または接続時に指定した資格情報) が 1 台または複数台のリモート コンピューターに委任されます。

委任は Kerberos と Active Directory にネイティブに備わっている機能です。この機能は完全にセキュリティで保護されています。パスワードは、そのままの状態でネットワーク上を転送されることはなく、暗号化または別の方法が適用されます。そのままの状態で送信されることがあったとしても、その文字列は共有の暗号鍵として使用されるものです。

委任とは、リモート コンピューター上にある Windows PowerShell のコピーが、あなたが実行するとおりにコマンドを実行できることを意味し、リモート処理ではセキュリティが透過的になります。許可されているすべての操作は、リモートで実行できます。許可されていない操作はリモートで実行できません。リモート処理は、あなたの代わりにコマンドを実行します。

クライアント コンピューターを操作して、リモート コンピューターである ServerA に接続します。あなたの資格情報が ServerA に委任されます。次に、ServerA から、さらに別のコンピューターへの接続を確立します。これはリモート接続である必要はありません。この 3 台目のコンピューターにネットワーク ドライブをマップしたり、証明書ストアへのアクセスを試行してみるなどの操作が該当します。これは、次ホップを実行したことになります。

最初のホップはクライアント コンピューターから ServerA へのホップです。次ホップは、ServerA から接続を試行する他のコンピューターへのホップです。資格情報は 2 回委任することができないため、問題が発生します。

これは、知らないうちに資格情報が渡されるのを防ぐためのセキュリティ機能です。ServerA は資格情報を他のコンピューターに渡せないので、次ホップは失敗します。

私が今まで担当した Windows PowerShell のすべての講義では、この状況に直面したことのある方が必ずいました。リモート処理は透過的で簡単に実行できる機能なので、コンピューターにリモート接続していることを忘れがちです。このため、次ホップを開始していることに気付かないまま、3 台目のコンピューターにリモート接続を試行する状況が往々にして生じます。

資格情報が委任されないため次ホップは失敗し、見慣れないエラー メッセージが表示されることで、多くの人が困惑する結果となります。1 回のホップしか行っていない場合でも、委任された資格情報が必要なリモート コンピューターで操作を試行したときに、このような問題が発生することがあります。

Windows PowerShell のブログ記事「CredSSP for second-hop remoting (次ホップでリモート処理を行うための CredSSP、英語)」で、何が起きるか説明しています。また、この問題の解決方法である、新しい CredSSP 認証プロトコルを有効にする方法も説明しています。作業に使用するクライアント コンピューターとリモートで操作する予定の全コンピューターで、このプロトコルを有効にする必要があります。このプロトコルを有効にするには、次のコマンドを実行します。

Enable-WSManCredSSP –Role client –DelegateComputer * Enable-WSManCredSSP –Role server

どちらのコマンドをクライアント コンピューターで実行して、どちらのコマンドをサーバーで実行するかについては説明する必要はないでしょう。また、Windows リモート管理 (WinRM) 設定のグループ ポリシー オブジェクト (GPO) を通じて、このプロトコル有効にすることもできます。さらに、リモート処理を利用する Invoke-Command、Enter-PSSession、New-PSSession などのコマンドレットを使用するときにも、CredSSP プロトコルを指定する必要があります。

詳細については、Ravikanth Chaganti 氏が提供している無料の PDF ファイル「PowerShell 2.0 リモート処理の初心者向けガイド (英語)」を参照してください。この PDF ファイルでは、次ホップの問題とこの問題を解決する方法について (特に 10 章で) 詳しく説明しています。たとえば、ドメイン コントローラーは次ホップを既定でサポートするように構成されているため、次ホップの実行に CredSSP が必要ないことが明記されています。

他にもリモート処理で直面する厄介なシナリオは多数あります。ドメインに参加していないコンピューター、クロス ドメイン接続、プロキシ サーバー経由のリモート処理などに直面する可能性があります。Windows PowerShell で「help about_remote_troubleshooting」を実行し、このようなシナリオや他のシナリオに対応するための詳細を確認してください。それでも解決しない場合は、ご連絡ください。

Don Jones

Don Jones は、Microsoft MVP の受賞者で、『Learn Windows PowerShell in a Month of Lunches』(Manning Publications、2011 年) の著者でもあります。この書籍は、管理者が Windows PowerShell を効率的に使用できるようにすることを目的としています。また、一般ユーザーを対象にオンサイトの Windows PowerShell トレーニングも開催しています。Don に対するお問い合わせについては、ConcentratedTech.com (英語) または bit.ly/AskDon (英語) を参照してください。

関連コンテンツ