Изменить пароль на ESXi с помощью REST APIPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Изменить пароль на ESXi с помощью REST API

Сообщение Anonymous »

Я пытаюсь написать сценарий на PHP, который сбрасывает пароль root на ESXi («myhost», moId="host-15458»), зарегистрированном в VCSA версии 8.0.2 («myvCenter», API-Id= 8.0.2.200). У меня есть старый пароль в $oldpass и новый пароль в $newpass. Хост для моих тестов представляет собой совершенно новую версию вложенного ESXi 8.0.2b.
Я использую его уже несколько месяцев...
Я не совсем уверен, откуда возникла проблема, после того, как я попробовал так много вещей, включая ИИ... который продолжал извиняться.
Я потерял идеи, да что угодно работать на PHP или веб-сервере (Apache) можно, SOAP, cURL или что-то еще, PowerCLI и средства на базе Windows неприемлемы. У меня есть VMWare API для PHP, но я не понимаю, как его подключить и как он работает, возможно, это решение, хотя это "старая" версия для 6.7, просто я не знаю, как ей пользоваться.
Я попробовал использовать объект SOAPClient, вход в систему прошел успешно, но, похоже, время ожидания истекло сразу, поэтому объект Session непригоден для использования даже для немедленного выхода из системы:
/var/www/html/interfaces/RootPasswordChange $ php SOAP.php
login successful
stdClass Object
(
[key] => 52c007b6-208a-8a5b-1e76-955ac6134e59
[userName] => VSPHERE.LOCAL\(redacted)
[fullName] => reporter reporter
[loginTime] => 2024-06-28T10:38:18.945751Z
[lastActiveTime] => 2024-06-28T10:38:18.945751Z
[locale] => en
[messageLocale] => en
[extensionSession] =>
[ipAddress] => (redacted)
[userAgent] => PHP-SOAP/7.4.3-4ubuntu2.23
[callCount] => 0
)
attempting logout()
SoapFault exception: [ServerFaultCode] The session is not authenticated. in /var/www/html/interfaces/RootPasswordChange/SOAP.php:52
Stack trace:
#0 /var/www/html/interfaces/RootPasswordChange/SOAP.php(52): SoapClient->__call()
#1 /var/www/html/interfaces/RootPasswordChange/SOAP.php(75): ESXI_SOAP->__construct()
#2 /var/www/html/interfaces/RootPasswordChange/SOAP.php(92): ESXI_Test()

Этот сценарий был основан на скрипте, найденном в Stack Overflow, который демонстрирует те же симптомы.
Я пробовал через вызовы cURL, работу входа и выхода из системы, Я могу получить список хостов и их moId, однако не могу получить даже информацию API:
function getApiInfo($curl, $vcs, $session_id) {
curl_setopt_array( $curl ,
[ CURLOPT_URL => "https://" . $vcs . "/api"
, CURLOPT_CUSTOMREQUEST => "GET"
, CURLOPT_RETURNTRANSFER => true
, CURLOPT_HTTPHEADER => [ API_VAR_SESSION . ': ' . $session_id ]
, CURLOPT_SSL_VERIFYPEER => false
, CURLOPT_NOPROXY => "*"
]
) ;

$res = curl_exec( $curl ) ;
print_r( $res ) ;
$inf = curl_getinfo( $curl ) ;
$ret = $inf[ 'http_code' ] ;

return $ret === 200 ? json_decode($response, true) : null;
}

выводит следующее:
HTTP/2 405
cache-control: must-revalidate,no-cache,no-store
content-type: text/html;charset=iso-8859-1
content-length: 473
x-envoy-upstream-service-time: 0
date: Fri, 28 Jun 2024 10:51:20 GMT




Error 405 HTTP method GET is not supported by this URL

HTTP ERROR 405 HTTP method GET is not supported by this URL

URI:/api
STATUS:405
MESSAGE:HTTP method GET is not supported by this URL
SERVLET:servlet 4





ИИ Claude 3.5 предложил следующее:
function getHostDetails( $curl , $vcs , $moId , $session_id ) {
$url = 'https://' . $vcs . '/api/vcenter/host/' . $moId ;
echo "$url\n";
curl_setopt_array( $curl ,
[ CURLOPT_URL => $url
, CURLOPT_CUSTOMREQUEST => 'GET'
, CURLOPT_RETURNTRANSFER => true
, CURLOPT_SSL_VERIFYPEER => false
, CURLOPT_HEADER => [ API_VAR_SESSION => $session_id ]
]
) ;
$res = curl_exec( $curl ) ;
var_dump( $res ) ;
$ret = curl_getinfo($curl);
return $ret[ 'http_code' ] === 200 ? json_decode($res , true) : null ;
}

но я получаю:
{"error_type":"NOT_FOUND","messages":[{"args":[],"default_message":"Not found.","id":"com.vmware.vapi.rest.httpNotFound"}]}"
https://myvcenter/api/vcenter/host/host-15458
string(241) "HTTP/2 404
date: Fri, 28 Jun 2024 11:42:45 GMT
content-type: application/json
x-envoy-upstream-service-time: 1



Подробнее здесь: https://stackoverflow.com/questions/786 ... h-rest-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»