Spécifié dans le fichier PROTOCOL.key d’OpenSSH : une chaîne magique openssh-key-v1 suivie d’un octet nul, le nom de l’algorithme de chiffrement (none ou aes256-ctr), le nom de la KDF (none ou bcrypt) avec son sel et son nombre de tours (16 par défaut, ssh-keygen -a l’augmente), les clés publiques et une section chiffrée contenant deux fois un entier de contrôle (pour détecter une phrase de passe erronée), les clés privées et les commentaires. Les clés Ed25519 ont toujours utilisé ce format ; depuis la version 7.8, les clés RSA et ECDSA aussi, sauf si l’option -m PEM est indiquée.
Les bibliothèques et les outils plus anciens ne lisent que le PEM (PKCS #1, SEC 1 ou PKCS #8) : les premières versions de JSch, certains services de CI et le code Java qui utilise les spécifications de clé standard échouent avec des erreurs comme invalid privatekey. Convertissez la clé avec ssh-keygen -p -m PEM -f key (qui réécrit le fichier sur place) ou exportez une clé publique avec ssh-keygen -e -m PKCS8. Les clés publiques restent sous la forme d’une seule ligne type base64 comment.