Erreur SSH: type de clé inconnu '----- BEGIN'

8

Je rencontre des problèmes lors de l'utilisation de clés autorisées pour la connexion SSH à un serveur distant. Les messages d'erreur que je reçois ressemblent à ceci:

OpenSSH_5.2p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to xx.xx.xx [xxx.xx.xx.xx] port 22.
debug1: Connection established.
debug3: Not a RSA1 key file /Users/bfenker/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
...
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /Users/bfenker/.ssh/id_rsa type 1
ssh_exchange_identification: Connection closed by remote host

D'autres questions sur ce site ont posté des questions similaires, et la solution était généralement de revérifier toutes les autorisations côté client, ce que j'ai fait:

drwxr-xr-x+ 23 bfenker          staff   782 May  8 11:02 bfenker
drwx------   8 bfenker          staff   272 May  8 10:05 .ssh
-rw-------   1 bfenker  staff  1675 May  8 09:51 id_rsa
-rw-r--r--   1 bfenker  staff   418 May  8 09:51 id_rsa.pub
-rw-------   1 bfenker  staff   999 May  8 09:46 identity
-rw-r--r--   1 bfenker  staff   663 May  8 09:46 identity.pub
-rw-r--r--   1 bfenker  staff   416 May  8 09:06 known_hosts

Je peux utiliser la clé autorisée pour SSH dans un autre serveur et de ce serveur SSH dans le serveur que je veux. Il s'agit d'une solution de contournement passable que j'essaie de résoudre, mais je pense que cela montre également que mon client et le serveur sont correctement configurés.

Notez que lorsque je SSH réussit dans un autre serveur, je reçois les mêmes messages d'erreur, mais il semble récupérer en commençant par les lignes:

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0

Est-ce que quelqu'un sait pourquoi cela fonctionne dans certains cas mais pas dans le cas où je veux? Toute autre suggestion serait très appréciée!

fenkerbb
la source
Avez-vous modifié le serveur /etc/hosts.allowet les /etc/hosts.denyfichiers?
Michael Hampton

Réponses:

13

Nécroquestion! Basé sur le fait que vous pouvez utiliser cette clé pour vous connecter à un autre serveur @ michael-hampton est sur la bonne piste: il y a quelque chose (pare-feu / wrappers tcp / config sshd) sur le serveur de destination qui refuse l'accès. Tout ce discours sur les formats de clé incorrects est un hareng rouge basé sur une interprétation incorrecte des informations de débogage. La ligne

debug1: identity file /Users/bfenker/.ssh/id_rsa type 1

indique que ssh a pu comprendre la clé.

Mark Wagner
la source
4
Cela devrait être plus haut, j'avais exactement le même journal que celui-ci, mais cela a fini par comprendre la clé SSH et je ne me connectais pas pour une raison différente. Pourquoi il est dit dans le journal qu'il ne pouvait pas comprendre la clé, alors qu'en réalité, il me dépasse.
mgrandi
Il essaie d'abord de le lire dans un format de ligne unique et s'il échoue, il le restitue dans le journal détaillé, puis essaie également d'autres formats, ce qui réussira.
Samoth
8

Votre clé SSH est stockée dans le mauvais format. OpenSSH utilise des clés qui sont mises sur une seule ligne. Vous avez besoin ssh-keygenavec -iet -moptions, voir man ssh-keygen. Probablement l'un d'entre eux:

ssh-keygen -m RFC4716 -i -f /Users/bfenker/.ssh/id_rsa

Utilisez la sortie comme nouveau fichier clé ( ssh-keygen ... >newkeyfile).

Modifier 1:

Veuillez noter ceci: "Cette option lira un fichier de clé privée (ou publique) non chiffré "

Donc, probablement le fichier doit être changé en un sans phrase secrète par un programme qui comprend ce format.

Hauke ​​Laging
la source
Merci pour votre réponse. Mon application ssh-keygen n'a pas d' -moption, et essayer sans l' -moption me donne cette erreur: buffer_get_string_ret: bad string length 813827235 key_from_blob: can't read key type decode blob failed.
fenkerbb
Ensuite, vous devriez vérifier la documentation de votre logiciel SSH ou effectuer la conversion sur un système Linux normal (un système de confiance).
Hauke ​​Laging
Ha! Linux "normal"! Je suis sur MacOSX, donc je suppose que mon système d'exploitation est probablement le problème ici.
fenkerbb
@fenkerbb Pas votre OS mais le format de clé par défaut de votre (= votre OS) implémentation SSH. Vous auriez le même problème puttysous Windows. Mais le mastic est si agréable d'offrir très commodément les deux formats ... (au moins pour les clés publiques)
Hauke ​​Laging
J'ai essayé votre commande avec une version différente de ssh-keygen et j'obtiens cette erreur buffer_get_string_ret: bad string length 813827235 La première ligne de mon fichier de clés est -----BEGIN RSA PRIVATE KEY-----et à partir de la ligne suivante est une longue liste de caractères alphanumériques. @Hauke ​​Laging
fenkerbb
1

Vous devez d'abord vérifier vos journaux sshd. c'est à dire

less /var/log/secure

Selon le fichier de distribution Unix avec le journal de sécurité peut différer. Mais lorsque vous trouvez si, cela devrait indiquer la raison pour laquelle vous ne pouvez pas vous connecter.

lbednaszynski
la source
1

J'ai également rencontré ce problème récemment. Dans mon cas, toutes les autorisations étaient correctes, y compris .ssh, le fichier rsa, le répertoire personnel et tout ce qui concerne l'utilisateur. Le problème était que j'avais une clé publique précédemment générée dans .ssh qui ne correspondait pas à la clé privée que j'utilisais pour la connexion. La suppression de la clé publique de .ssh a résolu le problème.

J'utilisais ssh-keygen pour créer le répertoire .ssh qui a abouti à cette clé de pub et donc au problème.

user3627034
la source
1

J'ai l'impression que les réponses ici ne sont pas très claires. La réponse de Mark Wagner le couvre, mais n'explique pas complètement la situation.

Les lignes dans la sortie sont préfixées avec leurs niveaux de débogage, ce qui donne également une indication de leur signification: mais les nombres inférieurs sont plus significatifs. Le debug3:truc est beaucoup moins important quedebug1:

Lorsque le fichier de clé est lu, ssh essaie d'abord de l'analyser en tant que clé RSA obsolète (maintenant appelée "RSA1"), ces clés commencent par SSH PRIVATE KEY FILE FORMATet un numéro de version. Les nouvelles clés RSA démarrent toutes -----BEGIN RSA PRIVATE KEY-----. Voici une tentative de connexion où se identitytrouve une ancienne clé de style RSA1 et id_rsaun nouveau style.

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/identity type 0
debug1: identity file /home/user/.ssh/identity-cert type -1
debug3: Not a RSA1 key file /home/user/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
[...]
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /home/user/.ssh/id_rsa type 1
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type -1
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1

À ce stade, il a identifié les types de clés dans les fichiers au identityfur type 0et à id_rsamesure type 1. Les autres fichiers qu'il vérifie n'existent pas et le sont donc type -1.

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3

Comme il s'agit du protocole 2, la clé RSA du protocole 1 identitysera ignorée pendant l'échange de clés.

debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/user/.ssh/id_rsa (0x5622d77426a0)
debug2: key: /home/user/.ssh/id_dsa ((nil))
debug2: key: /home/user/.ssh/id_ecdsa ((nil))

Ici, il nous rappelle les fichiers clés qu'il souhaite utiliser. Vous ne savez pas pourquoi il n'a pas rejeté les fichiers manquants, uniquement le fichier de protocole 1, mais ...

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
[...]
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 372 bytes for a total of 1689
debug1: Server accepts key: pkalg ssh-rsa blen 277

Et ici, il offre la id_rsaclé et il est accepté.

Donc, en bref, le problème dans le titre de la question est un hareng rouge qui vient de ssh essayant plusieurs façons d'analyser les clés qu'il trouve, pas un vrai problème avec une clé.

Protocole Cupcake
la source
0

J'ai eu le même problème sur mon MacBook Pro avec MacOS 10.7.5. Il n'y avait rien de mal avec mes clés, c'est juste qu'elles sont cryptées (avec une phrase secrète, comme vous êtes censé le faire) et n'étaient pas décryptées par ssh correctement. Il semble que cela ssh-agentpose problème.

Selon cet article , essayez ceci:

  1. Mettez /usr/bin/ssh-agentvos éléments de connexion (Préférences Système -> Utilisateurs et groupes -> sélectionnez l'utilisateur -> Éléments de connexion). Il est extrêmement difficile de naviguer /usr/bindans la boîte de dialogue, donc l'article suggère de créer un lien dans votre répertoire personnel ( ln -s /usr/bin/ssh-agent) que vous pouvez supprimer une fois que vous l'avez placé dans les éléments de connexion.

  2. Quittez Terminal.app

  3. Redémarrez la machine.

  4. Ouvrez Terminal et réessayez votre commande ssh.

A fonctionné pour moi (au moins, il a une fois).

Paul Price
la source