【问题标题】:Xamarin. Pair to Mac. Key 'OPENSSH' is not supported赛马林。与 Mac 配对。不支持密钥“OPENSSH”
【发布时间】:2019-03-16 12:45:47
【问题描述】:

当我尝试连接我的 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-----

当我重新安装 Windows 10 和 Visual Studio 2017 而不是 Windows 7 时,我开始收到此错误

请帮我解决一下

【问题讨论】:

  • 这个问题你Win+F了吗?

标签: macos xamarin xamarin.ios


【解决方案1】:

我在命令提示符中执行以下命令,然后重试连接 Mac。

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

-t 指定加密类型'RSA'

-b 使用 8192 位密钥

-N 明确指定空关键词

【讨论】:

  • 我在新安装的 Windows 10 / VS 2017 上也遇到了这个问题,而我的其他 Windows 10 / VS 2017 桌面能够很好地与同一台 Mac 配对。上面的命令用 RSA 密钥替换了 OPENSSH 密钥,我现在可以与 Mac 配对了。
  • Mac 或 Windows 机器必须输入这个吗?
  • 在 Windows 机器上输入它并覆盖旧密钥(如果存在)。为我解决了。
【解决方案2】:

我可以确认user10613465 的回答对我有效。

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

就我而言,我拥有正确版本的 Windows、Visual Studio 和 Xamarin。 系统通过了此处描述的第 8 和 9 号测试: link from official Xamarin on MS Docs

我知道评论他的回答是一种方式,但我还没有特权(使用工作电子邮件的 StackOverflow 帐户)

【讨论】:

    【解决方案3】:

    这确实是由 Xamarin 中的错误引起的。 user10613465建议的解决方案 不适用于最新版本的 Xamarin(至少不适用于我),但我找到了解决方法。

    背景

    请随意跳过本节* Xamarin 生成一对 SSH 密钥 存储在 %LOCALAPPDATA%\AppData\Local\Xamarin\MonoTouch 中。 SSH 密钥文件来了 多种口味。一个是 RSA,另一个是 OPENSSH。味道可以 通过检查密钥文件中的第一行找到。这里的问题 是 Xamarin 生成 OPENSSH 密钥;但无法阅读。

    在最新版本的 Xamarin 中,私钥是加密的,并且 密码短语本身被加密并存储在一个名为 密码短语.key。如果您尝试擦除文件并生成新的 如建议的正确风格的键集,Xamarin 将拒绝 生成一个它不理解的新集合。

    策略

    也可以跳过这个。我的研究表明你不能 将 OPENSSH 密钥转换为 RSA 密钥。据我所知,Xamarin 确实 不使用任何外部程序生成密钥集,因此替换/重定向 不是一个可行的解决方案。

    我找到的解决方案是生成支持的新密钥集 风味,使用相同的密码并保留 passphrase.key。获取密码是棘手的部分。我已经用VS调试了另一个VS实例来获取它。

    程序

    我假设您已经尝试过 ot pair 并且密钥有问题 对(id_rsa、id_rsa.pub 和 passphrase.key)

    1. 启动 Visual Studio (VS),打开一些项目。我们称之为 VS的实例A。

    2. 选择工具 -> IOS -> 与 mac 配对。

    3. 输入您的 Mac 的 IP 地址或名称,但不要输入名称和 还没有密码。

    4. 启动另一个 VS 实例。我们将此实例称为 B。

    5. 在实例 B 中,选择调试 -> 选项

    6. 在调试 -> 选项中,取消选择“仅启用我的代码”,点击确定。

    7. 选择调试,附加到进程。

    8. 选择 VS 的实例 A。该进程称为 devenv.exe。

    9. 在实例 B 中,选择 Debug -> Windows -> Breakpoints

    10. 在断点窗口中,单击新建 -> 函数断点。选择
      Renci.SshNet.PrivateKeyFile.Open.

    11. 现在,在实例 A 中,输入名称和密码,然后单击确定。这 断点现在被实例 A 击中,所以它冻结了。

    12. 在实例 B 中,您应该会看到一些汇编代码。代码本身是 不重要;但我们应该能够看到 方法。通过点击 Debug -> 打开局部变量窗口 Windows -> 本地人

    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 中的 header 是这样的

      ----开始 RSA 私钥-----

    不是这样的

    -----BEGIN OPENSSH PRIVATE KEY-----
    
    1. 如果没有,您需要使用另一个 ssh-keygen。也许腻子可以 帮助你。

    2. 登录 mac 电脑。编辑 .ssh/authorized_keys 并删除 旧钥匙。 (你找到的那个 "%LOCALAPPDATA%\Xamarin\MonoTouch\old\id_rsa.pub"

    3. 从“%LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa.pub”添加新公共

    这解决了我的问题

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 2022-07-14
      • 2014-08-11
      • 1970-01-01
      • 2016-07-31
      • 2010-12-11
      • 2018-01-27
      • 2019-11-03
      相关资源
      最近更新 更多