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

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

Сообщение Anonymous »

Я пытаюсь написать сценарий на PHP, который сбрасывает пароль root на ESXi «myhost». У меня есть старый пароль в $oldpass и новый пароль в $newpass. Хостом для моих тестов является совершенно новая версия вложенного ESXi 8.0.2b.
Я использую его уже несколько месяцев...
Я не совсем уверен, откуда возникла проблема, после того, как я попробовал так много вещей, включая ИИ... который продолжал извиняться.
Судя по тому, что я понял, единственный способ сделать это можно через вызов SOAP непосредственно к ESXi с аутентификацией root для SOAP-брокера:
Я попробовал с объектом SOAPClient, вот код:

Код: Выделить всё

class ESXI_SOAP extends SoapClient {
private $ServiceInstance;
private $session;

public function __construct( $url , $user , $pass ) {
try {
parent::__construct( $url .  '/vimService.wsdl' ,
[ 'trace'      => true
, 'exceptions' => true
, "location"   => $url
, 'stream_context' => stream_context_create(
[ 'ssl' => [ 'verify_peer' => false
, 'verify_peer_name' => false , 'allow_self_signed' => true ]
]
)
]
) ;

$this->ServiceInstance =
$this->RetrieveServiceContent(
[ "_this" => new SoapVar( "ServiceInstance", XSD_STRING , "ServiceInstance" ) ]
)->returnval ;

$this->session =
$this->Login(
[ '_this'    => $this->ServiceInstance->sessionManager
, 'userName' => $user
, 'password' => $pass
]
)->returnval ;
echo "login successful\n\nServiceInstance:\n" ;
var_dump($this->ServiceInstance);
echo "\nSession:\n";
var_dump( $this->session ) ;
} catch( Exception $e ) {
printf("%sn",$e->__toString() ) ;
return false ;
}

echo $this->__getLastResponseHeaders();

/*** Logout ***/
try{
echo "attempting logout()\n";
$result = $this->Logout(
[ "_this" => $this->ServiceInstance
]
) ;
} catch (Exception $e) {
printf("%sn",$e->__toString());
return false;
}
echo "logout successful\n";
}
Вход успешен, но, похоже, время ожидания истекает немедленно, поэтому объект Session непригоден для использования даже для немедленного выхода из системы:

Код: Выделить всё

login successful

ServiceInstance:
object(stdClass)#4 (26) {
(...)
["about"]=>
object(stdClass)#8 (14) {
["name"]=>
string(11) "VMware ESXi"
["fullName"]=>
string(32) "VMware ESXi 7.0.3 build-20328353"
["vendor"]=>
string(12) "VMware, Inc."
["version"]=>
string(5) "7.0.3"
["patchLevel"]=>
string(4) "0.55"
["build"]=>
string(8) "20328353"
["localeVersion"]=>
string(4) "INTL"
["localeBuild"]=>
string(3) "000"
["osType"]=>
string(9) "vmnix-x86"
["productLineId"]=>
string(11) "embeddedEsx"
["apiType"]=>
string(9) "HostAgent"
["apiVersion"]=>
string(7) "7.0.3.0"
["licenseProductName"]=>
string(17) "VMware ESX Server"
["licenseProductVersion"]=>
string(3) "7.0"
}
(...)
}

Session:
object(stdClass)#2 (11) {
["key"]=>string(36) "5223f016-7f92-c38c-0870-6fb25219ef71"
["userName"]=>string(4) "root"
["fullName"]=>string(13) "Administrator"
["loginTime"]=>string(27) "2024-07-11T19:26:13.116449Z"
["lastActiveTime"]=>string(27) "2024-07-11T19:26:13.116466Z"
["locale"]=>string(2) "en"
["messageLocale"]=>string(2) "en"
["extensionSession"]=>bool(false)
["ipAddress"]=>string(10) "(redacted)"
["userAgent"]=>string(26) "PHP-SOAP/7.4.3-4ubuntu2.23"
["callCount"]=>int(0)
}
HTTP/1.1 200 OK
Date: Thu, 11 Jul 2024 19:26:13 GMT
Set-Cookie: vmware_soap_session="4f71046b2b4285b476a11ca548f61a690bba1a89"; Path=/; HttpOnly; Secure;
Cache-Control: no-cache
Connection: Keep-Alive
Content-Type: text/xml;  charset=utf-8
X-Frame-Options: DENY
Content-Length: 815

attempting logout()
SoapFault exception: [ServerFaultCode] The object 'vmodl.ManagedObject:' has already been deleted or has not been completely created in /var/www/html/interfaces/RootPasswordChange/SOAP.php:45
Stack trace:
#0 /var/www/html/interfaces/RootPasswordChange/SOAP.php(45): SoapClient->__call()
#1 /var/www/html/interfaces/RootPasswordChange/SOAP.php(73): ESXI_SOAP->__construct()
#2 /var/www/html/interfaces/RootPasswordChange/SOAP.php(90): ESXI_Test()
Этот сценарий основан на скрипте, найденном в Stack Overflow, который демонстрирует те же симптомы в моей системе.
Как будто я что-то упускаю в сохранение $ServiceInstance или передача его в выход из системы.
На этом этапе я просто ищу работающий $this->Logout().

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

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