web-dev-qa-db-ja.com

Xamarin。 Macとペアリングします。キー「OPENSSH」はサポートされていません

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#L19

そして、keyNameのようなOpenSSHについては何もありません。

フォルダー%LOCALAPPDATA%\ Xamarin\MonoTouchで秘密鍵を確認します。

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

Windows 7の代わりにWindows 10およびVisual Studio 2017を再インストールすると、このエラーが表示され始めました

解決してください

10
Pavel Druzhinin

コマンドプロンプトで以下のコマンドを実行し、Macの接続を再試行します。

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

Xamarinのバグが原因です。 user10613465によって提案されたソリューションは、Xamarinの最新バージョンでは動作しません(少なくとも私にとっては動作しません)が、回避策を見つけました。

背景

このセクションをスキップしてください* Xamarinは%LOCALAPPDATA%\ AppData\Local\Xamarin\MonoTouchに保存されているSSHキーのペアを生成します。 SSHキーファイルには複数の種類があります。 1つはRSA、もう1つはOPENSSHです。フレーバーは、キーファイルの最初の行を調べることで見つけることができます。ここでの問題は、XamarinがOPENSSHキーを生成することです。しかし、それらを読むことはできません。

Xamarinの最近のバージョンでは、秘密鍵は暗号化され、パスフレーズ自体は暗号化され、passphrase.keyという名前のファイルに保存されます。ファイルを消去して、提案された正しいフレーバーの新しいキーセットを生成しようとすると、Xamarinはキーを拒否し、理解できない新しいセットを生成します。

Stategy

これもスキップしてください。私の調査では、OPENSSHキーをRSAキーに変換できないことが示唆されています。私が見る限り、Xamarinは外部プログラムを使用せずにキーセットを生成するため、置換/リダイレクトは実行可能なソリューションではありません。

私が見つけた解決策は、サポートされているフレーバーの新しいキーセットを生成し、同じパスフレーズを使用し、passphrase.keyをそのままにしておくことです。パスフレーズを取得するのは難しい部分です。 VSを使用して、VSの別のインスタンスをデバッグして取得しました。

手順

すでにotペアを試みており、キーペア(id_rsa、id_rsa.pub、passphrase.key)に欠陥があると思います

  1. Visual Studio(VS)を起動し、プロジェクトを開きます。このインスタンスをVSのインスタンスAと呼びます。

  2. [ツール]-> IOS-> Pair to mac。

  3. MacのIPアドレスまたは名前を入力しますが、名前とパスワードはまだ入力しないでください。

  4. VSの別のインスタンスを起動します。このインスタンスをBと呼びます。

  5. インスタンスBで、[デバッグ]-> [オプション]を選択します。

  6. [デバッグ]-> [オプション]で[コードだけを有効にする]の選択を解除し、[OK]をクリックします。

  7. [デバッグ]、[プロセスにアタッチ]を選択します。

  8. VSのインスタンスAを選択します。このプロセスはdevenv.exeと呼ばれます。

  9. インスタンスBで、[デバッグ]-> [ウィンドウ]-> [ブレークポイント]を選択します。

  10. ブレークポイントウィンドウで、[新規]-> [関数ブレークポイント]をクリックします。選択する
    Renci.SshNet.PrivateKeyFile.Open。

  11. 次に、インスタンスAで、名前とパスワードを入力し、[OK]をクリックします。ブレークポイントはインスタンスAにヒットするため、フリーズします。

  12. インスタンスBには、いくつかのアセンブラーコードが表示されます。コード自体は重要ではありません。しかし、メソッドの引数を見ることができるはずです。 [デバッグ]-> [ウィンドウ]-> [ローカル]をクリックして、ローカル変数ウィンドウを開きます。

  13. 1つの変数はパスフレーズです。 uuidのように見えます。それをクリップボードにコピーし、便利な場所に保存します。

  14. 実行を再開し、両方のVSインスタンスを閉じます。

  15. C:\ Users\mk\AppData\Local\Xamarin\MonoTouchと入力します

  16. 回復したばかりのキーとパスフレーズを使用してMacに接続できることを確認します。

    ssh -i id_rsa mymac

  17. 古いキーを邪魔にならないように移動します。

    mkdir old move id_rsa old move id_rsa.pub old

  18. 新しいキーセットを生成し、同じパスフレーズを使用します。

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

  19. Id_rsaのヘッダーが次のようになっていることを確認します

    ---- RSAプライベートキーを開始-----

こうではない

-----BEGIN OPENSSH PRIVATE KEY-----
  1. そうでない場合は、別のssh-keygenを使用する必要があります。おそらく、PuTTYが役立つでしょう。

  2. Macコンピューターにログインします。 .ssh/authorized_keysを編集して、古いキーを削除します。 (「%LOCALAPPDATA%\ Xamarin\MonoTouch\old\id_rsa.pub」にあるもの

  3. 「%LOCALAPPDATA%\ Xamarin\MonoTouch\id_rsa.pub」から新しいパブリックを追加します

これで問題が解決しました

1
millibit

ser10613465 の答えが私のケースで機能したことを確認できます。

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

私の場合、Windows、Visual Studio、およびXamarinの正しいバージョンがありました。システムは、ここで説明されているテスト番号8および9まで合格しました。 MS Docsの公式Xamarinからのリンク

彼の質問にコメントするのはマナーだと知っていますが、まだ仕事がありません(仕事用メールのStackOverflowアカウントを使用)

1
Mr.K