SSHを介したPowerShellの例

追加要件

このスクリプトを実行するには、ゲートウェイサーバーとターゲットサーバーの間でSSH公開キー認証をセットアップし有効にする必要があります。

ユーザー定義パラメータ

以下の例では、3つの値をハードコードします。

  1. 認証情報をローテーションするスケジュールタスクの名前

  2. サービスが実行されているサーバーのDNSで解決可能な名前

  3. SSHユーザーのユーザー名

$ScheduledTaskName = '<Task Name>'
$TargetMachine = '<Target Machine>'
$SSHUsername = '<SSH Username>'

スケジュールされたタスクの更新

ネイティブSSHリモート処理はPowerShellにまだ完全には実装されておらず、PowerShell 7でのみ確実な実行が可能です。.ps1スクリプトを実行する際、ゲートウェイはデフォルトでWindows PowerShell (v5) を使用します。ただし、スクリプトを添付するときに、代替のスクリプトコマンドを指定してPowerShell 7実行可能ファイルのパスを指定することもできます。

ローテーションが完了すると、サービスステータスがDEBUGに記録されます。

$ScheduledTaskStatus = Invoke-Command `
                        -HostName $TargetMachine `
                        -UserName $SSHUsername `
                        -ScriptBlock { `
                            Stop-ScheduledTask -TaskName $Using:ScheduledTaskName; `
                            Set-ScheduledTask -TaskName $Using:ScheduledTaskName -User $Using:Params.user -Password $Using:Params.newPassword; `
                            Start-ScheduledTask -TaskName $Using:ScheduledTaskName; `
                            return Get-ScheduledTask $Using:ScheduledTaskName | Select-Object -ExpandProperty "State";
                        }

Write-Debug "$ScheduledTaskName is: $($ScheduledTaskStatus.State)"

完全な例

[CmdletBinding()]
param (
    [Parameter(ValueFromPipeline=$true)]
    [string]
    $Record
)

# User defined parameters
$ErrorActionPreference = "Stop"
$DebugPreference = 'Continue'
$ScheduledTaskName = '<Task Name>'
$TargetMachine = '<Target Machine>'
$SSHUsername = '<SSH Username>'

$RecordJsonAsB64 = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Record))
$Params = ($RecordJsonAsB64 | ConvertFrom-Json -ErrorAction Stop)
Write-Debug "Running Post-Rotation Script on = $($Params.userRecordUid)"

$ScheduledTaskStatus = Invoke-Command `
                        -HostName $TargetMachine `
                        -UserName $SSHUsername `
                        -ScriptBlock { `
                            Stop-ScheduledTask -TaskName $Using:ScheduledTaskName; `
                            Set-ScheduledTask -TaskName $Using:ScheduledTaskName -User $Using:Params.user -Password $Using:Params.newPassword; `
                            Start-ScheduledTask -TaskName $Using:ScheduledTaskName; `
                            return Get-ScheduledTask $Using:ScheduledTaskName | Select-Object -ExpandProperty "State";
                        }

Write-Debug "$ScheduledTaskName is: $($ScheduledTaskStatus.State)"

最終更新