Astuce pour coller du texte dans une VM sans accès

Parfois chez des clients en environnement vSphere on a accès à une VM, mais aucun moyen de transférer des fichiers dessus : pas de RDP, pas de SSH, pas de partage réseau ni accès internet … juste une remote console. Comment transférer un fichier dans ce cas ?

Quand on a un accès physique, on peut monter une clé USB en passthrough, mais pas possible à distance. On peut aussi monter un iso qui contient le fichier, ou encore créer un vmdk temporaire sur une autre VM qui elle a accès à Internet ou autre, pour y placer le fichier, puis monter ce vmdk sur la VM destinataire.

Dans certains cas cela n’est pas possible car pour uploader sur un datastore il faut accepter le certificat de l’ESXi. Quand on n’a administrativement accès qu’au vCenter par exemple (pare feu qui bloque tout seul HTTPS sur le vCenter) on ne peut pas.

Une solution que j’utilise parfois est de passer par KeePass : il existe une option relativement peu connue pour laisser le logiciel écrire à notre place. C’est très pratique (quoi qu’un peu dangereux) pour remplir les champs utilisateur et mot de passe automatiquement : il suffit de se positionner sur le champ utilisateur d’une fenêtre de connexion, de retourner dans KeePass, de sélectionner la bonne entrée et de taper Ctrl+V : KeePass fait Alt+Tab, écrit l’utilisateur, Tab, le mot de passe. Il ne faut surtout pas cliquer ailleurs, ni appuyer sur ctrl ou alt en même temps, sinon je vous laisse imaginer ce qu’il peut se passer :)

On peut aller un peu plus loin : Outils > Options > Interface (1) > Fenêtre principale > Afficher les commandes supplémentaires du menu de la saisie automatique

Options de KeePass
Figure 1 — Options de KeePass

Cela fait apparaitre un menu contextuel supplémentaire quand on clique sur une entrée qui sert à sélectionner le champ que l’on veut, à envoyer sur l’autre fenêtre. On va s’en servir pour écrire n’importe quel texte !

Menu contextuel
Figure 2 — Menu contextuel

Il faut faire attention, parfois le focus ne se fait pas bien, il faut re-cliquer et on loupe les premiers caractères.

Il y a une limitation : il faut que ce soit sur une seule ligne. Dans le cas de petits fichiers textes bien structurés ce n’est pas un problème : j’enlève les retours à la ligne, j’envoie l’écriture auto, et je les remets sur la destination.

Pour fichiers texte dont la remise en forme risque d’être pénible, ou encore pour les fichiers binaires qui ne peuvent pas s’écrire au clavier, ça ne va pas convenir, il va falloir faire autrement : utiliser le base64. Il s’agit simplement d’une façon de représenter des octets sous forme “imprimable”, non pas avec 2 ou 10 symboles comme en base 2 ou 10 mais avec 64 symboles différents (lettres majuscules, minuscules, et quelques caractères spéciaux). Voir la RFC 4648 pour apprendre par coeur la spécification.

Sous Linux on a la commande… base64. Voici comment encoder puis décoder :

$ base64 fichier.bin
$ base64 -d fichier.bin

Sous Windows c’est plus chiant comme d’habitude, il faut se farcir du PowerShell et ça ressemble à ça (merci à ce site) :

$Text = 'Le texte à encoder'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText =[Convert]::ToBase64String($Bytes)
$EncodedText

$EncodedText = "TGUgdGV4dGUgw6AgZW5jb2Rlcg=="
$DecodedText = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedText))
$DecodedText
💡 Alternative
On peut aussi utiliser un outil en ligne comme celui-ci mais si la VM n’a pas accès à Internet on aura un souci pour décoder.

Vous l’aurez compris il suffit de coller le texte en base64 dans le champ login ou mot de passe de KeePass, puis de lancer la saisie automatique pour que ça s’écrive tout seul sur la VM.

Alors attention, l’écriture est lente : on est à quelques caractères par seconde (entre 3 et 6 je dirais), donc un débit d’environ 36 bps ! C’est environ 1500 fois plus lent que du 56k (mis de côté les headers réseau bien sûr) :) Donc ne commencez pas à vouloir transférer des iso de 14Go avec cette méthode (ça prendrait littéralement 100 ans).

Bien sûr, d’autres outils de macro permettent de faire ça de façon un peu plus propre. Mais KeePass est un outil très courant chez les sysadmins alors ponctuellement ça peut dépanner, sans avoir besoin d’installer un logiciel spécifique. Plus d’infos sur la saisie automatique à cette adresse.