当我尝试连接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时,我开始收到此错误
请帮助我解决问题
答案 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)
启动Visual Studio(VS),打开一些项目。我们称这个 VS的实例A。
选择工具-> IOS->与Mac配对。
输入Mac的IP地址或名称,但不要输入名称和 密码了。
启动另一个VS实例。我们称这个实例为B。
在实例B中,选择Debug-> Options
在“调试”->“选项”中,取消选择“仅启用我的代码”,然后单击“确定”。
选择“调试,附加到进程”。
选择VS的实例A。该过程称为devenv.exe。
在实例B中,选择Debug-> Windows-> Breakpoints
在断点窗口中,单击“新建”->“函数断点”。选择
Renci.SshNet.PrivateKeyFile.Open。
现在,在实例A中,输入名称和密码,然后单击“确定”。的 现在实例A击中了断点,因此冻结了。
在实例B中,您应该看到一些汇编代码。代码本身是 不重要;但我们应该能够看到 方法。通过单击调试->打开局部变量窗口 Windows-> Locals
一个变量是密码短语。它看起来像个uuid。复制到 剪贴板并将其存储在方便的地方。
继续执行,关闭两个VS实例。
输入C:\ Users \ mk \ AppData \ Local \ Xamarin \ MonoTouch
验证您可以使用密钥和密码短语连接到您的Mac 刚刚恢复:
ssh -i id_rsa mymac
移开旧键:
mkdir旧 将id_rsa移至旧 将id_rsa.pub移到旧版本
生成一组新密钥,使用相同的密码。
ssh-keygen -t rsa -N“” -f“%LOCALAPPDATA%\ Xamarin \ MonoTouch \ id_rsa”
验证id_rsa中的标题看起来像这样
---- BEGIN RSA私钥-----
不是这样
-----BEGIN OPENSSH PRIVATE KEY-----
如果没有,则需要使用另一个ssh-keygen。也许腻子可以
登录到Mac计算机。编辑.ssh / authorized_keys并删除 旧密钥。 (您在其中找到的那个 “%LOCALAPPDATA%\ Xamarin \ MonoTouch \ old \ id_rsa.pub”
从“%LOCALAPPDATA%\ Xamarin \ MonoTouch \ id_rsa.pub”中添加新的公众
这为我解决了问题