Xamarin。配对至Mac。不支持键“ OPENSSH”

时间:2018-10-11 12:22:36

标签: macos xamarin xamarin.ios

当我尝试连接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时,我开始收到此错误

请帮助我解决问题

3 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:1)

我可以确定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帐户)

答案 2 :(得分:1)

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

背景

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

在最新版本的Xamarin中,私钥已加密,并且 密码短语本身已加密并存储在名为 密码如果您尝试删除文件并生成新文件 根据建议的正确口味的键集,Xamarin将拒绝 键生成一个新的集,它不理解。

策略性

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

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

过程

我认为您已经尝试过ot配对并且密钥有问题 对(id_rsa,id_rsa.pub和passphrase.key)

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

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

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

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

  5. 在实例B中,选择Debug-> Options

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

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

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

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

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

  11. 现在,在实例A中,输入名称和密码,然后单击“确定”。的 现在实例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中的标题看起来像这样

    ---- BEGIN 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”中添加新的公众

这为我解决了问题