mito’s blog

IT技術メインの雑記。思い立ったが吉日。

【Ansible】WindowsへのWinRMサービス設定で、セキュリティによるエラーを回避する

目的

Ansibleを使いたいため、WindowsServer2016に以下の手順を参考にしながらWinRMサービス設定を行ったところ、エラーが出て失敗。 簡単な回避方法があったのでメモ。 docs.ansible.com


エラー内容

公式ドキュメント記載の手順、3行目で失敗します。

$url = "https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file


スクリプトのダウンロードに失敗していますね。
日本語でのエラーメッセージがこうで、

PS C:\Users\Administrator> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
"2" 個の引数を指定して "DownloadFile" を呼び出し中に例外が発生しました: "要求は中止されました: SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした"
発生場所 行:1 文字:1
+ (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException


英語でのエラーメッセージがこちら。

PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Exception calling "DownloadFile" with "2" argument(s): "The request was aborted: Could not create SSL/TLS secure channel."
At line:1 char:1
+ (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException


簡単な回避策

スクリプトのダウンロードに失敗しているので、手動でそれを作成するだけです。
スクリプトの微修正や設定変更などは不要!

  1. ConfigureRemotingForAnsible.ps1をブラウザで開く。 ansible/ConfigureRemotingForAnsible.ps1 at devel · ansible/ansible · GitHub

  2. テキストにコピペする。スクリプト名は「ConfigureRemotingForAnsible.ps1」で、文字コードは「Unicode」で保存すること。絶対。

  3. 隠しフォルダを表示し、「C:\Users\Administrator\AppData\Local\Temp\」に2で作ったスクリプトを置く。

  4. 管理者権限でPowershellを実行し、コマンドをたたく。

PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> powershell.exe -ExecutionPolicy ByPass -File $file
Self-signed SSL certificate generated; thumbprint: D5006B006958E6A365DD26E82C422352BC40C6A4


wxf                 : http://schemas.xmlsoap.org/ws/2004/09/transfer
a                   : http://schemas.xmlsoap.org/ws/2004/08/addressing
w                   : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
lang                : en-US
Address             : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
ReferenceParameters : ReferenceParameters

Ok.

PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 172.31.32.14, ::1, 2001:0:348b:fb58:88c:3e90:53e0:dff1, fe80::5efe:172.31.32.14%7, fe80::88
c:3e90:53e0:dff1%6, fe80::f4b3:ee13:47ac:a094%4

Listener
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname = EC2AMAZ-11KTLG7
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = D5006B006958E6A365DD26E82C422352BC40C6A4
    ListeningOn = 127.0.0.1, 172.31.32.14, ::1, 2001:0:348b:fb58:88c:3e90:53e0:dff1, fe80::5efe:172.31.32.14%7, fe80::88
c:3e90:53e0:dff1%6, fe80::f4b3:ee13:47ac:a094%4

PS C:\Users\Administrator>




雑記

できた。
この手は1ファイルだけで完結するからさくっとできた話。