141 lines
6.2 KiB
PowerShell
141 lines
6.2 KiB
PowerShell
[CmdletBinding(SupportsShouldProcess=$true)]
|
|
Param()
|
|
|
|
# User to log in as on the VM host
|
|
$USERNAME = 'dustin'
|
|
# VM host name/IP address
|
|
$SERVER = 'atria'
|
|
# List of virtual machines to start
|
|
$TO_START = @(
|
|
'Rigel',
|
|
'Bellatrix'
|
|
)
|
|
|
|
# SSH public key of the VM host, in PuTTY registry format
|
|
$HOST_KEY = @'
|
|
0x10001,0xbb0ae72e54993cdef1f0040f0a1ef78e86f030e00d14c80534450d097117d08aee
|
|
61c60d8d85372e719691186ec6c64b0bf7de8c2bdbf61b3cc0b86252b09bcc003133133d85d0
|
|
edf5cca5a1e82aa18711a9135062448633a7b9eb164c7ab41df1c7283a19c7e010ffdbba26f7
|
|
75366aa8b01fd4681e7d234b592f07f43668057d96d605cb54d7825bc438ae433bc42f8579a9
|
|
652e7ba841fcedec8e9a6718a82bc14d71bf22a7261f2c035abc4ca1460ccadee21da9077d6d
|
|
fd1880ea26012d2cfd2e3bbcdaebe3df1c78115b1c2302f99363ca30c0ef31d612a8a6f870d8
|
|
60752e8633ad5749d7d66e6028420a4d4c262d0fb7abe0291a657b55cf490e4873
|
|
'@
|
|
# Private key to use to authenticate to the VM host
|
|
$PPK = @'
|
|
UHVUVFktVXNlci1LZXktRmlsZS0yOiBzc2gtcnNhDQpFbmNyeXB0aW9uOiBub25lDQpDb21tZW50
|
|
OiBsb2NhbHN5c3RlbUBhcmN0dXJ1cw0KUHVibGljLUxpbmVzOiAxMg0KQUFBQUIzTnphQzF5YzJF
|
|
QUFBQUJKUUFBQWdFQXpyQVlwRjZ6QWMvZUtvWmZJeWpsczJWc0hPM2JtSWFiN3h5ZA0KZkpPL0dG
|
|
VzdUYlRhSVpLamMzdEVkZmZCSmZTbFB0QXhwUVFqNmNPbW9mOTVvazFpMzdMNlBEak8vbE9qTStJ
|
|
aw0KalNFNUN1QU5zN3FyTWNZMEgxMzNkN0tlRWt4dTVmNTgyWktmdmtrRTludDhaY20xenB6TlhY
|
|
UHZCY29IMmVlVg0KQ3d6QTdDelc1azNuN3dVSFNCYktoeHB4VFp2RnZ1a25nWkpxUVR0V1V3eSsy
|
|
OUtkcmhqZEdZcWV0QUJ4dXZkcQ0KQldoWEl1WWtqTG1RR2lrZmxERGk0MmFLa1pmVS9qR00zYVVD
|
|
Y0RES3NXTjFRV0ZrOFYxS0FySklzQU9PVVVsSQ0Kckl1OTI4TUo3SU41S1h2QTJhMmphZlNrVEZw
|
|
ZklPZG9QblhoZ2liTFdOQXJ0citTb01BeUl3Um10WG5WenlCdg0KWWhzZ2xybVcyM2VIWFc0MHMw
|
|
R21zK0R5WHhIMXJhS0N2MGZtK0JFelF3dDlpR25uSUkyOU9TR1J1TmVRUXFhKw0KdE5WVlBEUDBJ
|
|
UmhaUkdnMWt3Qjh0QTQvVTZGS1R3TEgyUDRMVm05VGNkejk4STRESmRZb2Z4ZG14cktvQXoySA0K
|
|
c3BtYitoM2VzckxkY0hRbjBFeCtTNkJxalUybGQrd2YvTnJZVHhOZlQycjMyRC95VFNTaEdLRHFW
|
|
ZGJTNFlaRQ0KTHlCUDJwUUFUTVNHUktsNnNlb1JvZVpMQkpFM2F2MVBoaGpMbTNpT1VrNVo0Z1Bk
|
|
dXhVMTg3UlEvRGs5UEZObw0KSXF0L2wrYUZTZzR4Q0xEdXl2MEQ4Z3M5OWRjdjRWSy9nZWsyWlhD
|
|
anV2RlFYNHU5NGZhbE9ieE5NSC82YVhzeQ0Kd3JwbDhHcz0NClByaXZhdGUtTGluZXM6IDI4DQpB
|
|
QUFDQVFDOTdlMGhhOGNXYS95Vng1V3htelB3OVdwRUdOZWc2bVhHOTdOUDRiYUZFSUthYnRaSVhU
|
|
eEFtc2xKDQp6dWpXeFNJNXVHVDRnRmhhUlJXcG5xY2ZoV0hHcEhjK1FncFJmVW5jcGtzWjV5MS9u
|
|
WFJmOTZRN2s0blhvblN6DQpMb05xd3NiRmdoSGNzRC9EblF0NnRxbXBwSms2WnBNelIvQm1MMFY4
|
|
SU9uU3pYTUNpaEdWWEZpV2MxTE1uMUpTDQpvcTFPUEIxKy84TndKYTIvWnZWaEVxR0x1cDY3cUNV
|
|
ZVk3UnVEajcrMVlRRStCaTRTUnFxMUFmZ3NDcmJNOWRwDQpMY3R4Q0EvVTA1WXpkUWtvMHVQRm1h
|
|
b0V1bHpDSGwrdmMyVmplT09rcERUeGxTc0JTM0RuTExTRy9Cai9ZVW9PDQpWbTEybUR1OVh3WFlo
|
|
LytvQi9raExmNm43azlob2ZTQXJNMy9NYjRtSGl1emdXeTZVSUNBMXVRMmVPVGRsY2NsDQpPSFI4
|
|
T1FoU09CY0lHSXB0SEF1MUxCcVF4MEkyanJEY1F2RDRjZVVUL0VBclh5QldqVFZiMElDODhEeUpq
|
|
eVNFDQpMZGNJS3ZVSzJHTzNCRGZKS09RMzBiNnVLNlJBN09qbUlOMUF6Lzk3TnYvbm12TUdwS0RW
|
|
QndyazBqb3hWS2ZEDQo1c1hGNXpYUTBtQ2NhTm9oaXphNzlFOGZ0UittWUxnc0NWVEhScVdtMSt1
|
|
MXI5NC9LWHBqU0Q0V05EaTRCb1hVDQpVMjJUeG5QL0pEc3U2YW9HaERuZVNlVDI0NnVEQkhwM1Jl
|
|
MVIrTnRvOXFRSitUcjIxUmJFeWhnK2trSlN2WmptDQpiSUMwU3BjYi9xbDVoUFhsTXVLcEJKZlJX
|
|
c29vd2M3SWc5WTNTdWhNbXpjUEJkTDhIUUFBQVFFQTY2R0NTOEIxDQpoTm5yOXlCT0FCMGNmdDRn
|
|
SDNMZFAwUlJDYW1WSDlvWTFlNDh1Z1hzekI4MGthMk11cTZXUmx6QUsyMmpoWXBlDQpQN242VUE5
|
|
ZmI3WktBdHZEeDh3enpPaHhQMy83OUdjVXdUL3hXb3NFVS83MWZJaXBYOFp2ZWF3K3BGdVRKV0Jz
|
|
DQptb0NUQmk5SnUybjAycEswS0ZOVS9weURnaWt1T2ZZUno2QWhHQnROUkF3M3Jsb2tuZ0crQldq
|
|
eFpOWi9iZGVFDQp5UWJ0TXNmbGZTbTBOeVIzcys1a3Rxa3c2ejluc1FmSk9KMHFjMnI0amI2cXVn
|
|
eUFQYk5HSDdaelRwcVFLMVkyDQprVWY3Vmt3ZC9HK3ZUUVRDSDh1VmVRd2wyYnM1VGwrOU9ZRlht
|
|
cFpoUU1uUXpSZjg4blcrQk9VR0d3WFFkdFAxDQozTjlCQzVURERJMDRkUUFBQVFFQTRJNFVzVTJi
|
|
TDhzVUNIbmYwZThKMUE3RnVZV1FNdWhENTlHVVhnTHNPak1YDQpiemFVOTZtWURpMnRaSlByTEpV
|
|
bEEwUFRGdklQL2NablM3VEwySFE1cG54cVZ4QUd3d3RBdzFUN0ZTTHlPTktHDQpqNVFWQjFjek56
|
|
dlhDZWYveHJxK3FIVWVzQ1NpbnpjUHhzbDBXemljSnJzV3Q1VFhKMXNJREZOQXJ4VzZ0eDJaDQpP
|
|
bDlRckRrUkFqcUxjRVdrNWw5aTdTQkxLT3REZlNhK3d0MnBrUENIUms4ZHVuSnRickhsNktvQVV2
|
|
R2lEN0tiDQowMmZwak1UYW1BYWNaZUlsemtiODluQjRVM2lEQ2hXSy84UGJ0bTNiL09mQTFqd0I4
|
|
eEx3dmw2UXpsSXBIMVZqDQp1WjNnTGxIdUNrbkoxRFZxNEVnbithZkxUSmVrSE9JZ1hVdCtZNzVw
|
|
WHdBQUFRQTZHZXVIQmhxSzN2YWpBd1g0DQpGa1BMSW9vdUtYcWxLcHB2TmJvaFcrUVc1UjhuOXZm
|
|
T09OT2pMOGVrN2tvSWtObXgwT0FxUnQ3azd3ZGpNd3NBDQpzblBtMWl3RnN3dXppUnRZcTN1UlR4
|
|
M3N5OTY2eE1yQ0ozTjZsTTVka2V3OVI4Q0FFNFg0SFFwWWd0M3dwVVlYDQowamxFNmNSL0xGUC9M
|
|
czh6NWFuZVhjY0tHQnpscFpsN2xKVUd5RXRtLzROa2d4OXAvYmI5ZkN1MVArRXZ4Z0V3DQpqbnYr
|
|
TkYzYWh1SGx1WGx3TWkvdUFSWTIvcGhxemtSbXFJb2ZjQ2l2a0dlV0VvRFBHR2FvNTg1OVNBZzll
|
|
MjMyDQpyRWhCcVZlTlc2ZmhOaXpsNHR1dkl0TTlTTEQ2M2lwZmprK1JrQmNTeWNOYnJZVHN0RkZL
|
|
Ykl3OEQrSDJXa29GDQpKU1FaDQpQcml2YXRlLU1BQzogNjI2ZDQ5YTQwOWNiZGExMzhkNTNiMzZh
|
|
MGFkNjdjOTRkYWNlMGQ4Nw0K
|
|
'@
|
|
|
|
|
|
#=============================================================================#
|
|
|
|
|
|
Function Save-HostKey
|
|
{
|
|
Param(
|
|
[Parameter(Mandatory=$true)][String] $Hostname,
|
|
[Parameter(Mandatory=$true)][String] $Pubkey,
|
|
[Int] $Port = 22,
|
|
[String] $KeyType = 'rsa2'
|
|
)
|
|
$path = 'HKCU:\Software\SimonTatham\PuTTY\SshHostKeys'
|
|
if (-not (Test-Path $path -PathType Container)) {
|
|
New-Item -Type Container -Force -Path $path
|
|
}
|
|
New-ItemProperty -Path $path `
|
|
-Name "${KeyType}@${Port}:${Hostname}" `
|
|
-Value $PubKey `
|
|
-PropertyType String `
|
|
-Force `
|
|
-ErrorAction Stop `
|
|
| Out-Null
|
|
Write-Verbose "Saved $KeyType key for ${Hostname}:${Port}"
|
|
}
|
|
|
|
|
|
Function Save-TempPpk
|
|
{
|
|
Param(
|
|
[Parameter(Mandatory=$true)][Byte[]] $KeyData,
|
|
[String] $Path = ${env:TEMP}
|
|
)
|
|
|
|
$filename = Join-Path $Path ("{0}.ppk" -f [Guid]::NewGuid())
|
|
Set-Content -Path $filename -Value $KeyData -Encoding Byte `
|
|
-ErrorAction Stop
|
|
Write-Verbose "Wrote private key file $filename"
|
|
return $filename
|
|
}
|
|
|
|
|
|
Function Main
|
|
{
|
|
Save-HostKey $SERVER ($HOST_KEY -split '\s+' -join '').Trim()
|
|
|
|
$commands = $TO_START | ForEach-Object {
|
|
"start $_"
|
|
}
|
|
|
|
$keyfile = Save-TempPpk ([Convert]::FromBase64String($PPK))
|
|
try {
|
|
Write-Output $commands | & ${env:ProgramFiles(x86)}\PuTTY\plink.exe `
|
|
-i $keyfile `
|
|
-l $USERNAME `
|
|
-batch `
|
|
$SERVER `
|
|
virsh -c qemu:///system
|
|
} finally {
|
|
Remove-Item -ErrorAction Stop $keyfile
|
|
Write-Verbose "Removed $keyfile"
|
|
}
|
|
}
|
|
|
|
Main
|