OK、これが私がやろうとしていることです。携帯電話から (ssh 経由で) keepass データベースを取得し、興味のあるパスワードを検索するプログラムを作成しています。keepass データベースに ssh キーと同じパスワードを使用したいキーパスデータベースを取得するために作成したものですが、パスワードを2回入力したくありません。そう。これが私が考えたことです:パスワードを1回要求するperlスクリプトを(ssh-askpass経由で)書きます(これは私のreadpass関数です。それはうまく機能します。)そのキーなどを介してキーパスを読むことができます。そしてすべてが良いです。
しかし、電話にsshしようとしたときに、キーのパスワードの入力を再度求められずにssh-addを追加する方法を理解できないようです。
環境変数を単純にエコーするシェル スクリプトを作成し、そのスクリプトに SSH_ASKPASS を設定してみました (そして、環境変数にパスワードを設定し、それをシステム化します... このように:
my $key = readpass();
$ENV{"SSH_ASKPASS_ENV"} = $key;
$ENV{"SSH_ASKPASS"} = "/home/user/bin/ssh-askpass-env";
system("/usr/bin/ssh-add /home/user/.ssh/keepass-retriever");
ssh-askpass-env には次のものがあります。
#! /bin/sh
echo "${SSH_ASKPASS_ENV}"
しかし、それでもうまくいかないようで、パスワードを要求されます。ssh-askpass-envが呼び出され、パスワードが取得されていることを確認できます。
私の質問は次のとおりだと思います:事前に指定されたパスワードを使用して、perl 内から ssh-agent にキーを追加するにはどうすればよいですか? (以下の readpass() からパスワードを読み取ったばかりなので)
ありがとう!
sub readpass() {
my $passwd = undef;
if (defined($ENV{"DISPLAY"})) {
if (open(PASSWD, "/usr/bin/ssh-askpass 'KeePass' |")) {
chomp($passwd = <PASSWD>);
close(PASSWD);
}
}
else {
ReadMode('noecho');
printf("Enter keepass password: ");
$passwd = ReadLine(0);
chomp($passwd);
ReadMode('normal');
}
return($passwd);
}