Обновление bios supermicro через IPMI. Ключи IPMI

Иногда надо обновлять bios supermicro для того чтобы подходили процессоры следующих поколений или просто «надо обновить».
Обновлять с загрузочной флэшки не всегда безопасно и удобно,но и нужен локальный доступ к серверу.
По-этому я долго задавался вопросом,где брать ключи для обновления через ipmi. Потом увидел пост на форуме ixbt, где парень предлагает генерацию ключей. Но ему быстро запретили это открыто делать.
Придавать значение этому не стал,т.к не было необходимости.
Прошел год и мне надо было обновить bios на сервере supermicro,т.к лагал встроенный RAID контроллер.
И тут я начал усердно гуглить….И наткнулся на сайт
И о чудо все заработало,биос обновился. Правда проблема моя не решилась…

Получить ключ из под LINUX

echo -n 'bmc-mac' | xxd -r -p | openssl dgst -sha1 -mac HMAC -macopt hexkey:8544E3B47ECA58F9583043F8 | awk '{print $2}' | cut -c 1-24

Получить ключ из под Windows . Powershell

Param(
			[string]$BMC_MAC='AA:BB:CC:DD:EE:FF'
		)

		Function Convert-HexToByteArray {

			[cmdletbinding()]

			param(
				[parameter(Mandatory=$true)]
				[String]
				$HexString
			)
			$HexString = $HexString.ToLower()

			$Bytes = [byte[]]::new($HexString.Length / 2)

			For($i=0; $i -lt $HexString.Length; $i+=2){
				$Bytes[$i/2] = [convert]::ToByte($HexString.Substring($i, 2), 16)
			}

			$Bytes
		}

		Function Convert-ByteArrayToHex {

			[cmdletbinding()]

			param(
				[parameter(Mandatory=$true)]
				[Byte[]]
				$Bytes
			)

			$HexString = [System.Text.StringBuilder]::new($Bytes.Length * 2)

			ForEach($byte in $Bytes){
				$HexString.AppendFormat("{0:x2}", $byte) | Out-Null
			}

			$HexString.ToString()
		}

		$supermicro_secret = '8544E3B47ECA58F9583043F8'
		$bmc_mac_bytes = Convert-HexToByteArray( $BMC_MAC.Replace(':','').Trim() )

		$hmacsha = New-Object System.Security.Cryptography.HMACSHA1
		$hmacsha.key = Convert-HexToByteArray( $supermicro_secret )
		$signature = $hmacsha.ComputeHash($bmc_mac_bytes)
		$license_key = $signature[0..11]

		$license_key_hexstring = Convert-ByteArrayToHex($license_key)

		$length=$license_key_hexstring.Length
		for ($index = 0; $index -lt $length; $index += 4)
		{
			-join $license_key_hexstring[$index..($index+4-1)] | Write-Host -NoNewline
			Write-Host -NoNewline ("`t")
		}



Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *