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を再インストールすると、このエラーが表示され始めました
解決してください
コマンドプロンプトで以下のコマンドを実行し、Macの接続を再試行します。
ssh-keygen -t rsa -N "" -f "%LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa"
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)に欠陥があると思います
Visual Studio(VS)を起動し、プロジェクトを開きます。このインスタンスをVSのインスタンスAと呼びます。
[ツール]-> IOS-> Pair to mac。
MacのIPアドレスまたは名前を入力しますが、名前とパスワードはまだ入力しないでください。
VSの別のインスタンスを起動します。このインスタンスをBと呼びます。
インスタンスBで、[デバッグ]-> [オプション]を選択します。
[デバッグ]-> [オプション]で[コードだけを有効にする]の選択を解除し、[OK]をクリックします。
[デバッグ]、[プロセスにアタッチ]を選択します。
VSのインスタンスAを選択します。このプロセスはdevenv.exeと呼ばれます。
インスタンスBで、[デバッグ]-> [ウィンドウ]-> [ブレークポイント]を選択します。
ブレークポイントウィンドウで、[新規]-> [関数ブレークポイント]をクリックします。選択する
Renci.SshNet.PrivateKeyFile.Open。
次に、インスタンスAで、名前とパスワードを入力し、[OK]をクリックします。ブレークポイントはインスタンスAにヒットするため、フリーズします。
インスタンスBには、いくつかのアセンブラーコードが表示されます。コード自体は重要ではありません。しかし、メソッドの引数を見ることができるはずです。 [デバッグ]-> [ウィンドウ]-> [ローカル]をクリックして、ローカル変数ウィンドウを開きます。
1つの変数はパスフレーズです。 uuidのように見えます。それをクリップボードにコピーし、便利な場所に保存します。
実行を再開し、両方のVSインスタンスを閉じます。
C:\ Users\mk\AppData\Local\Xamarin\MonoTouchと入力します
回復したばかりのキーとパスフレーズを使用してMacに接続できることを確認します。
ssh -i id_rsa mymac
古いキーを邪魔にならないように移動します。
mkdir old move id_rsa old move id_rsa.pub old
新しいキーセットを生成し、同じパスフレーズを使用します。
ssh-keygen -t rsa -N "" -f "%LOCALAPPDATA%\ Xamarin\MonoTouch\id_rsa"
Id_rsaのヘッダーが次のようになっていることを確認します
---- RSAプライベートキーを開始-----
こうではない
-----BEGIN OPENSSH PRIVATE KEY-----
そうでない場合は、別のssh-keygenを使用する必要があります。おそらく、PuTTYが役立つでしょう。
Macコンピューターにログインします。 .ssh/authorized_keysを編集して、古いキーを削除します。 (「%LOCALAPPDATA%\ Xamarin\MonoTouch\old\id_rsa.pub」にあるもの
「%LOCALAPPDATA%\ Xamarin\MonoTouch\id_rsa.pub」から新しいパブリックを追加します
これで問題が解決しました
ser10613465 の答えが私のケースで機能したことを確認できます。
ssh-keygen -t rsa -N "" -f "%LOCALAPPDATA%\Xamarin\MonoTouch\id_rsa"
私の場合、Windows、Visual Studio、およびXamarinの正しいバージョンがありました。システムは、ここで説明されているテスト番号8および9まで合格しました。 MS Docsの公式Xamarinからのリンク
彼の質問にコメントするのはマナーだと知っていますが、まだ仕事がありません(仕事用メールのStackOverflowアカウントを使用)