3

パッケージ Net::SFTP と RSA キーを使用して sftp を試みています。パスワードなしで sftp サーバーに手動で sftp できますが、パッケージを使用すると機能しません。私はアイデアが不足しています。

my $ftp = Net::SFTP->new($HOST, user => $USER, ssh_args => { identity_files => [ "/Users/user/.ssh/id_rsa" ] }, debug => 3 );

次のエラーが表示されます。

キーファイル「/Users/tom/.ssh/id_rsa」で公開鍵認証を試行しています

致命的: rsa インポートに失敗しました: 無効な入力パケットです。/Library/Perl/5.18//Crypt/PK/RSA.pm 123 行目。

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

2

私はちょうどこれに遭遇しました。

問題は、コメントで指摘したように、私 (およびあなた) の秘密鍵が暗号化されていることです。暗号化された秘密鍵を使用するにはパスワードを入力する必要がありますが、perl モジュールはこれをサポートしていないようです。

このキーを使用するときはパスワードは必要ないと主張しましたが、それは sftp が ssh エージェントを使用していたからでしょうか? つまり、パスワードを 1 回入力すると、キーはすべての ssh ファミリのツールで使用できるようにメモリに残りますか? perlモジュールもエージェントをサポートしていないように見えますが、 Net::SFTP::Foreignを使用するという@salvaの提案はそれを解決するはずです。

私のワークステーションでは問題なく動作していたコードを実行しているときに、この例外が発生したことは注目に値しますが、perl の新しいインストールでは. 何が起こったのかは、Net::SSH::Perl モジュールが秘密鍵の読み取りのサポートを追加したか、鍵を無視するのではなく、秘密鍵の読み取りの失敗を致命的なエラーに変更したためだと思います。とにかく私のコードはキーを使用していませんでしたが、今ではその暗号化されたキーでは機能しません。これは次の方法で修正されます。

my $sftp= Net::SFTP->new(
   ...
   ssh_args => [ identity_files => [] ]
);

もちろん、デフォルトのユーザーの RSA ID ではなく、使用する特定の (暗号化されていない) ID ファイルのリストを追加することもできます。

コードを簡単に編集できない場合は、環境変数$HOMEをキーのないものに設定することで問題を回避することもできます。

于 2018-08-15T17:11:54.303 に答える