3

Java を使用して rsync をラップしようとしていますが、対話型ログインの処理に苦労しています。UNIX コマンド ライン ユーティリティexpectを動作させることはできますが、同等の Java を理解できないようですExpectJ。これが私の現在のコードです:

import java.io.IOException;

import expectj.ExpectJ;
import expectj.Spawn;


public class ExpectjTest {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String mypassword= "example";
        String cmd = "rsync  -e ssh --list-only --recursive   user@host:~/\n";
        ExpectJ expectinator = new ExpectJ();
        Spawn rsync = expectinator.spawn("/bin/bash");
        try {

            rsync.send(cmd);
            rsync.expect("password:",2);
            rsync.send(mypassword+"\n");
            rsync.expectClose();


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

これを実行すると、次のエラーが表示されます。

ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive).

Java から rsync を呼び出しているため、通常の ssh インタラクティブ ログインが開始されていないようです。を使用する類似のシェルスクリプトexpectは問題なく動作します。また、公開鍵認証を使用すると、同様の Java コードが機能するようです。だけを使用したい場合はssh、JSch などのライブラリを使用しますが、java rsync ライブラリはどれもあまり信頼していないため、コマンド ライン ツールをラップしたいと考えています。

ご協力いただきありがとうございます!

4

0 に答える 0