Upload automatique certificat pour ESXi

Il peut être utile d’installer automatiquement un nouveau certificat (type Let’s Encrypt) sur un hôte ESXi lorsque ce dernier est mis à jour.

On part du principe que vous avez un hôte ESXi. Sur cet hôte, il faut activer la console SSH (je sais, ce n’est pas le must, mais pour le moment c’est ce que j’ai trouvé).

Une fois la console activée, il faut installer le module paramiko sur le PC qui va héberger votre script (un VM dans l’hôte, un raspberry…)

pip3 install paramiko

Ensuite, on récupère le script et on modifie les informations (host, user, password).

On prend garde de modifier le chemin local pour le certificat et la clé (ici ce sont des certificats générés par Let’s Encrypt).

Le time.sleep(30) attend 30 secondes que les services derémarrent avant de couper la connexion.

#!/usr/bin/env python3

import paramiko
import time

# HostDNS or IP
sshHost = "123.45.67.89"
sshPort = 22
sshUser = "username"
sshPass = "password"

try:
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  ssh.connect(sshHost, username=sshUser, password=sshPass )

  sftp = ssh.open_sftp()

  localFilePath = '/etc/letsencrypt/live/domain.net/fullchain.pem'
  remoteFilePath = '/etc/vmware/ssl/rui.crt'
  sftp.put(localFilePath, remoteFilePath)

  localFilePath = '/etc/letsencrypt/live/domain.net/privkey.pem'
  remoteFilePath = '/etc/vmware/ssl/rui.key'
  sftp.put(localFilePath, remoteFilePath)

  chan = ssh.invoke_shell()
  chan.send('services.sh restart\n')
  time.sleep(30)

finally:
  ssh.close()