3

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);
}
4

1 に答える 1

0

ssh-addのマニュアルページを読んだ後、ターミナルの取り外しが機能していることがわかりました。

system("/usr/bin/ssh-add /home/user/.ssh/keepass-retriever < /dev/null &>/dev/null");
于 2013-01-02T08:39:17.757 に答える