Skip to main content

Proxmox API acceso con Ticket y API Tokens

Existen varias formas de acceder al API de Proxmox. Una es usando un token generado de forma temporal (ticket) que nos devuelve una llamada a nuestros Proxmox (Ya sea un Proxmox VE, un Proxmox Backup Server o un Proxmox Mail Gateway)

Un ticket es un valor de texto aleatorio firmado que incluye el usuario y la hora de creación. Los tickets están firmados por la clave de autenticación de todo el clúster que se rota una vez al día.

Además, cualquier solicitud de escritura (POST/PUT/DELETE) debe incluir un token de prevención CSRF dentro del encabezado HTTP. Los siguientes ejemplos utilizan la herramienta de línea de comando curl.

Ejemplo: obtener un nuevo ticket y el token de prevención CSRF
Advertencia, los parámetros de la línea de comando son visibles para todo el sistema; evita ejecutar lo siguiente en hosts que no sean de confianza ya que se muestran los datos de usuario y password.

curl -k -d 'username=root@pam' --data-urlencode 'password=nocopiesestepasswordquenotevaafuncionar' https://10.0.0.1:8006/api2/json/access/ticket

Esto nos devolverá en JSON como el del ejemplo que mostramos

{ 
  "data": { 
    "CSRFPreventionToken":"EDUEDUE2:IoLu1UzvOmeBOVuHf+b6QaZpxOZnPYY",  
    "ticket":"PVE:root@pam:EDUEDUE2::6to03dN5AL66ecT0VPUboLB18oxg...", 
    "username":"root@pam"
  }
}

NOTA: Los tickets tienen una duración limitada de 2 horas. Pero simplemente puede obtener un ticket nuevo pasando el ticket antiguo como contraseña al método /access/ticket antes de que expire su vida útil.

Debes pasar el ticket devuelto con una cookie a cualquier solicitud posterior

curl -k -b "PVEAuthCookie=PVE:root@pam:EDUEDUE2::6to03dN5AL66ecT0VPUboLB18oxg..." https://10.0.0.1:8006/api2/json/

Nos devolverá la información básica del api

{
  "data": [
    { "subdir": "version" },
    { "subdir": "cluster" },
    { "subdir": "nodes" },
    { "subdir": "storage" },
    { "subdir": "access" },
    { "subdir": "pools" }
  ]
}

Además, cualquier solicitud de escritura (POST, PUT, DELETE) debe incluir el encabezado CSRFPreventionToken:

curl -XDELETE -H "CSRFPreventionToken:EDUEDUE2:IoLu1UzvOmeBOVuHf+b6QaZpxOZnPYY" ......

La otra forma es mediante un API Token

API Token

Los tokens API permiten el acceso stateless (sin estado) a la mayoría de las partes de la API REST desde otro sistema, software o cliente API. Se pueden generar tokens para usuarios individuales y se les pueden otorgar permisos y fechas de vencimiento separados para limitar el alcance y la duración del acceso. Si el token API se ve comprometido, se puede revocar sin deshabilitar al usuario.

Los tokens API vienen en dos tipos básicos:

Privilegios separados: el token debe tener acceso explícito con ACL. Sus permisos efectivos se calculan cruzando los permisos de usuario y token.

Privilegios completos: los permisos del token son idénticos a los del usuario asociado.

Precaución El valor del token solo se muestra/devuelve una vez cuando se genera el token. ¡No se puede volver a recuperar a través de la API más adelante!
Para usar un token de API, establece en el encabezado HTTP la Autorización

curl -H "Authorization: PVEAPIToken=eduardo@pbs!pruebas=aaaaaaaaa-bbb-cccc-dddd-ef0123456789" https://10.0.0.1:8006/api2/json/