web-dev-qa-db-ja.com

AzureFunctionから自動的にAzure VMにログインする方法は?

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
2
Loz

Invoke-CommandをAzureRMVMで機能させることはできませんでした。最終的には正常に実装された実用的なソリューションは、AzureAutomationアカウント内でInvoke-AzureRmVMRunCommandを使用することです。関係者への注意:現在、Azure Powershell関数はAzureRMバージョン1のみをサポートしており、Invoke-AzureRmVMRunCommandをサポートしていません(インポートされたモジュールとしても)が、AzureAutomationは非常にうまく機能します。

2
Loz

まず、NSGルールがそのマシンへのインバウンドWINRMトラフィックを許可していることを確認しましたか?

また、Enter-PsSessionコマンドが間違っています。 -connectionURIは、httpsではなく、マシンのパブリックIPまたは名前である必要があります。その後、-useSSLフラグを使用する必要があります。

1
Sam Cogan

Azure VMでwinrmサービスを有効にする必要があります。また、Azure関数からログインする場合は、5986(https)でwinrmサービスのリッスンを設定する必要があります。 Httpが機能していません。

まず、VMファイアウォールとAzureNSGでポート5986を開く必要があります。

次に、証明書を作成する必要があります。

3番目に、5986でリッスンするようにWinRMを構成します。

これについての詳細はこれを参照してください ブログ

0
Shui shengbao

資格情報を使用して、ユーザー名の一部としてVM nameを指定します。つまり、マシン名がvm1で、ユーザーがmyusernameの場合、資格情報は次のようになります。

$cred= New-Object System.Management.Automation.PSCredential ("vm1\myUsername", $password )
0
Chris