web-dev-qa-db-fra.com

Xamarin. Associez-le à Mac. La clé 'OPENSSH' n'est pas prise en charge

Lorsque j'essaie de connecter mon Mac, j'obtiens cette erreur.

J'ai lu un journal où le trouver:

System.NotSupportedException: Key 'OPENSSH' is not supported.
at Renci.SshNet.PrivateKeyFile.Open(Stream privateKey, String passPhrase)
at Renci.SshNet.PrivateKeyFile..ctor(String fileName, String passPhrase)
at Xamarin.Messaging.Ssh.MessagingAuthenticationMethod.InitializePrivateKeyAuthentication(String username, ISshInformationProvider sshInformationProvider) in E:\A\_work\157\s\External\messaging\src\Xamarin.Messaging.Ssh\MessagingAuthenticationMethod.cs:line 76
at Xamarin.Messaging.Ssh.MessagingService.GetMessagingConnection(Func`1 passwordProvider, ISshInformationProvider sshInformationProvider) in E:\A\_work\157\s\External\messaging\src\Xamarin.Messaging.Ssh\MessagingService.cs:line 418
at Xamarin.Messaging.Ssh.MessagingService.<ConnectAsync>d__64.MoveNext() in E:\A\_work\157\s\External\messaging\src\Xamarin.Messaging.Ssh\MessagingService.cs:line 167

J'ai trouvé la bibliothèque et le code qu'il utilise: https://github.com/sshnet/SSH.NET/blob/bd01d971790a7c1fa73bad35b79ada90bf69e62d/src/Renci.SshNet/PrivateKeyFile.cs#L19

et il n'y a rien sur OpenSSH comme un nom de clé.

Je vérifie mes clés privées dans le dossier% LOCALAPPDATA%\Xamarin\MonoTouch:

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

J'ai commencé à recevoir cette erreur lorsque j'ai réinstallé Windows 10 et Visual Studio 2017 au lieu de Windows 7

S'il vous plaît, aidez-moi à le résoudre

10
Pavel Druzhinin

J'exécute la commande ci-dessous dans l'invite de commande et réessaye de connecter Mac.

ssh-keygen -t rsa -N "" -f "%LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa"
19
user10613465

C'est en effet causé par un bug dans Xamarin. La solution suggérée par user10613465 ne fonctionne pas avec les versions récentes de Xamarin (du moins pas pour moi), mais j'ai trouvé une solution de contournement.

Contexte

N'hésitez pas à ignorer cette section * Xamarin génère une paire de clés SSH stockées dans% LOCALAPPDATA%\AppData\Local\Xamarin\MonoTouch. Les fichiers de clés SSH sont disponibles en plusieurs versions. L'un est RSA, un autre est OPENSSH. La saveur peut être trouvée en inspectant la première ligne du fichier clé. Le problème ici est que Xamarin génère des clés OPENSSH; mais je ne peux pas les lire.

Dans les versions récentes de Xamarin, la clé privée est chiffrée et la phrase secrète elle-même est chiffrée et stockée dans un fichier nommé passphrase.key. Si vous essayez d'effacer les fichiers et de générer un nouveau jeu de clés de la bonne saveur comme suggéré, Xamarin rejettera les clés et générera un nouvel ensemble qu'il ne comprend pas.

Stratégie

N'hésitez pas à sauter celui-ci aussi. Ma recherche suggère que vous ne pouvez pas convertir une clé OPENSSH en clé RSA. Pour autant que je puisse voir, Xamarin n'utilise aucun programme externe pour générer le jeu de clés, donc remplacer/rediriger n'est pas une solution viable.

La solution que j'ai trouvée consiste à générer un nouveau jeu de clés de la saveur prise en charge, avec la même phrase secrète et en laissant passphrase.key en place. Obtenir la phrase secrète est la partie délicate. J'ai utilisé VS pour déboguer une autre instance de VS pour l'obtenir.

Procédure

Je suppose que vous avez déjà essayé la paire et que vous avez une paire de clés défectueuse (id_rsa, id_rsa.pub et passphrase.key)

  1. Lancez Visual Studio (VS), ouvrez un projet. Nous appellerons cette instance A de VS.

  2. Sélectionnez Tools -> IOS -> Pair to mac.

  3. Saisissez l'adresse IP ou le nom de votre Mac, mais NE saisissez PAS encore le nom et le mot de passe.

  4. Démarrez une autre instance de VS. Nous appelons cette instance B.

  5. Dans l'instance B, sélectionnez Débogage -> Options

  6. Dans Débogage -> Options, désélectionnez "Activer uniquement mon code", cliquez sur OK.

  7. Sélectionnez Debug, Attach to Process.

  8. Sélectionnez l'instance A de VS. Le processus s'appelle devenv.exe.

  9. Dans l'instance B, sélectionnez Debug -> Windows -> Breakpoints

  10. Dans la fenêtre des points d'arrêt, cliquez sur Nouveau -> Point d'arrêt fonction. Sélectionner
    Renci.SshNet.PrivateKeyFile.Open.

  11. Maintenant, dans l'instance A, entrez le nom et le mot de passe et cliquez sur OK. Le point d'arrêt est maintenant atteint par l'instance A donc il se fige.

  12. Dans l'instance B, vous devriez voir du code assembleur. Le code lui-même n'est pas important; mais nous devrions être en mesure de voir les arguments de la méthode. Ouvrez la fenêtre des variables locales en cliquant sur Debug -> Windows -> Locals

  13. Une variable est la phrase secrète. Cela ressemble à un uuide. Copiez-le dans le presse-papiers et stockez-le dans un endroit pratique.

  14. Reprenez l'exécution, fermez les deux instances VS.

  15. Entrez C:\Users\mk\AppData\Local\Xamarin\MonoTouch

  16. Vérifiez que vous pouvez vous connecter à votre Mac à l'aide de la clé et de la phrase secrète que nous venons de récupérer:

    ssh -i id_rsa mymac

  17. Éloignez l'ancienne clé:

    mkdir old move id_rsa old move id_rsa.pub old

  18. Générez un nouveau jeu de clés, utilisez la même phrase secrète.

    ssh-keygen -t rsa -N "" -f "% LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa"

  19. Vérifiez que l'en-tête dans id_rsa ressemble à ceci

    ---- COMMENCER LA CLÉ PRIVÉE RSA -----

et pas comme ça

-----BEGIN OPENSSH PRIVATE KEY-----
  1. Si ce n'est pas le cas, vous devez utiliser un autre ssh-keygen. Peut-être que PuTTY peut vous y aider.

  2. Connectez-vous à l'ordinateur Mac. Modifiez .ssh/authorized_keys et supprimez l'ancienne clé. (Celui que vous trouvez dans "% LOCALAPPDATA%\Xamarin\MonoTouch\old\id_rsa.pub"

  3. Ajoutez le nouveau public à partir de "% LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa.pub"

Cela a résolu le problème pour moi

1
millibit

Je peux confirmer que la réponse de ser10613465 a fonctionné dans mon cas.

ssh-keygen -t rsa -N "" -f "%LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa"

Dans mon cas, j'avais les bonnes versions de Windows, Visual Studio et Xamarin. Le système est passé jusqu'aux tests numéro 8 et 9 décrits ici: lien de Xamarin officiel sur MS Docs

Je sais que c'est une manière de commenter sa réponse, mais je n'ai pas encore le privilège (en utilisant le compte StackOverflow de l'e-mail professionnel)

1
Mr.K