AzureVMをオンにしてログインするHTTP呼び出しをWebサイトで実行できるようにする必要があるアプリケーションがあります。 PowerShellAzure関数を使用してこれを実行しようとしています。以下を使用して、関数でVMのオン/オフを正常に切り替えることができます。
$secpasswd = ConvertTo-SecureString $env:SP_PASSWORD -AsPlainText -Force;
$mycreds = New-Object System.Management.Automation.PSCredential ($env:SP_USERNAME, $secpasswd)
Add-AzureRmAccount -ServicePrincipal -Tenant $env:TENANTID -Credential $mycreds;
$context = Get-AzureRmContext;
Set-AzureRmContext -Context $context;
# Start VM
Start-AzureRmVM -ResourceGroupName myResourceGroup -Name myDevice | Out-String
しかし、VMにログインしようとすると、アクセス許可が拒否されたというエラーが発生します。私は次の方法を試しました:
$password = ConvertTo-SecureString "myPassword" -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ("myUsername", $password )
#Enter-PSSession -ConnectionUri https://<public_ip> -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) -Authentication Negotiate
そして
$Server="<public_ip>"
$User="myUsername"
$Password="myPassword"
cmdkey /generic:TERMSRV/$Server /user:$User /pass:$Password
mstsc /v:$Server
標準のリモートデスクトップGUIを使用してログインする場合、証明書のプロンプトも閉じる必要があります。 Azure Functionを使用して自動的にログインするには何をする必要がありますか?
VMはWindows10を実行しています。
編集:ポートを設定し、ローカル証明書を作成し、WinRMがVMのリモート管理用に設定されていること、およびHTTPSでリッスンしていることを確認しました。ただし、ローカルマシンでコマンドを試すと、次のようになります。
Enter-PSSession -ComputerName 52.166.161.93 -Credential $cred -UseSSL -SessionOption $so
エラーが発生します:
Enter-PSSession:リモートサーバー52.166.161.93への接続が次のエラーメッセージで失敗しました:クライアントは要求で指定された宛先に接続できません。宛先のサービスが実行されており、要求にアクセスしていることを確認します。宛先で実行されているWS-Managementサービス(最も一般的にはIISまたはWinRM)のログとドキュメントを参照してください。宛先がWinRMサービスの場合は、宛先で次のコマンドを実行して分析および構成します。 WinRMサービス:「winrmquickconfig」。詳細については、about_Remote_Troubleshootingヘルプトピックを参照してください。
編集:ポートが開いていて、AzureFunctionからアクセスできることを確認しました
New-Object Net.Sockets.TcpClient "<public-ip>", 5986
Invoke-CommandをAzureRMVMで機能させることはできませんでした。最終的には正常に実装された実用的なソリューションは、AzureAutomationアカウント内でInvoke-AzureRmVMRunCommandを使用することです。関係者への注意:現在、Azure Powershell関数はAzureRMバージョン1のみをサポートしており、Invoke-AzureRmVMRunCommandをサポートしていません(インポートされたモジュールとしても)が、AzureAutomationは非常にうまく機能します。
まず、NSGルールがそのマシンへのインバウンドWINRMトラフィックを許可していることを確認しましたか?
また、Enter-PsSessionコマンドが間違っています。 -connectionURIは、httpsではなく、マシンのパブリックIPまたは名前である必要があります。その後、-useSSLフラグを使用する必要があります。
Azure VMでwinrmサービスを有効にする必要があります。また、Azure関数からログインする場合は、5986(https)でwinrmサービスのリッスンを設定する必要があります。 Httpが機能していません。
まず、VMファイアウォールとAzureNSGでポート5986を開く必要があります。
次に、証明書を作成する必要があります。
3番目に、5986でリッスンするようにWinRMを構成します。
これについての詳細はこれを参照してください ブログ 。
資格情報を使用して、ユーザー名の一部としてVM nameを指定します。つまり、マシン名がvm1で、ユーザーがmyusernameの場合、資格情報は次のようになります。
$cred= New-Object System.Management.Automation.PSCredential ("vm1\myUsername", $password )