SFTPを実行するためのさまざまなオプション(Net :: SFTPは2005年以降更新されていません、Net :: SFTP :: Foreignはより最新です)を調べましたが、それらはすべてファイルを介してキー認証を実行します。
Net :: SFTPは、純粋なPerlSSH実装であるNet:: SSH::Perlによってサポートされています。パッチを適用して、必要な処理を実行できます。私はあなたのためにそれをスケッチするつもりです。
Net :: SSH :: Perl :: Auth :: PublicKey-> authenticateにパッチを適用するかラッパーを配置して、新しい構成キーを探します。それを呼びましょうidentity_keys
。
sub authenticate {
my $auth = shift;
my $ssh = $auth->{ssh};
my $sent = 0;
if (my $agent = $auth->mgr->agent) {
do {
$sent = $auth->_auth_agent;
} until $sent || $agent->num_left <= 0;
}
return $sent if $sent;
##### This is the new bit which tries any keys passed in. ######
my $ik = $ssh->config->get('identity_keys') || [];
for my $key (@$ik) {
return 1 if $auth->_auth_key($key);
}
my $if = $ssh->config->get('identity_files') || [];
my $idx = $auth->{_identity_idx} || 0;
for my $f (@$if[$idx..$#$if]) {
$auth->{_identity_idx}++;
return 1 if $auth->_auth_identity($f);
}
}
auth_key
_auth_identity
Net :: SSH :: Perl :: Key-> read_private_keyのコピーになりますが、これはNet :: SSH :: Perl ::Key->read_private_pemからキーを開いてファイルから読み取ることを除いたものになります。 read_private_pem
その後、を使用するために根性がありますread_private_key
。
または、ssh-agentを使用します。復号化された秘密鍵をメモリに保持するため、ディスクからすぐに消去できます。