Xamarin.Сопряжение с Mac.Ключ 'OPENSSH' не поддерживается - PullRequest
0 голосов
/ 11 октября 2018

Когда я пытаюсь подключить свой Mac, я получаю эту ошибку.

Я читаю журнал, где его найти:

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

Я нашел библиотеку и код, который использует:https://github.com/sshnet/SSH.NET/blob/bd01d971790a7c1fa73bad35b79ada90bf69e62d/src/Renci.SshNet/PrivateKeyFile.cs#L190

и в OpenSSH нет ничего, кроме keyName.

Я проверяю свои личные ключи в папке% LOCALAPPDATA% \ Xamarin \ MonoTouch:

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

Iначал получать эту ошибку, когда я переустановил Windows 10 и Visual Studio 2017 вместо Windows 7

Пожалуйста, помогите мне решить ее

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Я могу подтвердить, что user10613465 ответ работал в моем случае.

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

В моем случае у меня были правильные версии Windows, Visual Studio и Xamarin.Система прошла до тестов № 8 и 9, описанных здесь: ссылка от официального Xamarin на MS Docs

Я знаю, что это способ комментировать его ответ, но у меня пока нет привилегий(используя учетную запись StackOverflow рабочей электронной почты)

0 голосов
/ 14 ноября 2018

Это действительно вызвано ошибкой в ​​Xamarin.Решение, предложенное пользователем 10613465, не работает с последними версиями Xamarin (по крайней мере, не для меня), однако я нашел обходной путь.

Фон

Не стесняйтесьчтобы пропустить этот раздел * Xamarin генерирует пару ключей SSH, хранящихся в папке% LOCALAPPDATA% \ AppData \ Local \ Xamarin \ MonoTouch.Файлы ключей SSH доступны в нескольких вариантах.Один - RSA, другой - OPENSSH.Аромат можно найти, проверив первую строку в файле ключей.Проблема в том, что Xamarin генерирует ключи OPENSSH;но не может их прочитать.

В последних версиях Xamarin закрытый ключ шифруется, а сама фраза-пароль шифруется и сохраняется в файле с именем passphrase.key.Если вы попытаетесь стереть файлы и сгенерировать новый набор ключей правильного типа, как было предложено, Xamarin отклонит ключи и сгенерирует новый набор, который он не понимает.

Stategy

Не стесняйтесь пропустить это тоже.Мои исследования показывают, что вы не можете преобразовать ключ OPENSSH в ключ RSA.Насколько я вижу, Xamarin не использует никакую внешнюю программу для генерации набора ключей, поэтому замена / перенаправление не является жизнеспособным решением.

Решение, которое я нашел, заключается в создании нового набора ключей поддерживаемого варианта., с той же парольной фразой и оставляя passphrase.key на месте.Получение парольной фразы - сложная часть.Я использовал VS для отладки другого экземпляра VS, чтобы получить его.

Процедура

Я предполагаю, что вы уже пытались сделать пару и у вас есть дефектная пара ключей (id_rsa, id_rsa.pub и passphrase.key)

  1. Запустите Visual Studio (VS), откройте какой-нибудь проект.Мы назовем этот экземпляр A из VS.

  2. Выберите Инструменты -> IOS -> Сопряжение с Mac.

  3. Введите IP-адрес или имя вашего Mac, но НЕ вводите имя ипароля пока нет.

  4. Запустите другой экземпляр VS.Мы называем этот экземпляр B.

  5. В экземпляре B выберите Отладка -> Параметры

  6. В Отладка -> Параметры, отмените выбор «Включить только мойкод ", нажмите" ОК ".

  7. Выберите" Отладка "," Присоединить к процессу ".

  8. Выберите экземпляр A VS.Процесс называется devenv.exe.

  9. В экземпляре B выберите Отладка -> Windows -> Точки останова

  10. В окне точек останова нажмитена Новый -> Точка останова функции.Выберите
    Renci.SshNet.PrivateKeyFile.Open.

  11. Теперь, в экземпляре A, введите имя и пароль и нажмите OK.Теперь на точку останова попадает экземпляр A, поэтому он останавливается.

  12. В экземпляре B вы должны увидеть код ассемблера.Сам код не важен;но мы должны видеть аргументы метода.Откройте окно локальной переменной, нажав «Отладка» -> «Windows» -> «Locals»

  13. Одной из переменных является фраза-пароль.Это похоже на UUID.Скопируйте его в буфер обмена и сохраните в удобном месте.

  14. Возобновите выполнение, закройте оба экземпляра VS.

  15. Введите C: \ Users \ mk\ AppData \ Local \ Xamarin \ MonoTouch

  16. Убедитесь, что вы можете подключиться к вашему компьютеру Mac с помощью ключа и только что восстановленной парольной фразы:

    ssh -i id_rsa mymac

  17. Убрать старый ключ с пути:

    mkdir старый ход id_rsa старый ход id_rsa.pub старый

  18. Создать новыйнабор ключей, используйте ту же самую фразу-пароль.

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

  19. Убедитесь, что заголовок в id_rsa выглядит следующим образом

    ---- НАЧАЛО RSA PRIVATE KEY -----

и не так

-----BEGIN OPENSSH PRIVATE KEY-----

Если это не так, вам нужно использовать другой ssh-keygen.Возможно, там вам поможет шпаклевка.

Войдите на компьютер Mac.Отредактируйте .ssh / authorized_keys и удалите старый ключ.(Тот, который вы найдете в"% LOCALAPPDATA% \ Xamarin \ MonoTouch \ old \ id_rsa.pub"

Добавить новую публикацию из "% LOCALAPPDATA% \ Xamarin \ MonoTouch \ id_rsa.pub"

Это решило проблему для меня

0 голосов
/ 06 ноября 2018

Я выполняю приведенную ниже команду в командной строке и повторяю попытку подключения Mac.

ssh-keygen -t rsa -N "" -f "%LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...