0

アプリで ProcessBuilder を使用しています。SCP を呼び出す必要があります (ファイルをアップロードするため) が、パスワードを指定する方法がわかりません。これを解決するには?

String[] commands=new String[]{"bash","-c","scp example.tar.gz username@192.168.0.131 /root/new "};
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
Process process = pb.start();

SCP のパスワードをどこに追加しますか?

4

3 に答える 3

1

これを実現する最善の方法は、パスワード認証ではなくキー ペアを使用することです。キー ペアを生成するには、ユーザー名としてリモート マシンにログインします。プロンプトで次のように入力します。

ssh-keygen -t rsa

これにより、~/.ssh/id_rsa 秘密鍵と ~/.ssh/id_rsa.pub 公開鍵が生成されます。~/.ssh/id_rsa.pub をローカル マシンにコピーし、次のコマンド ラインを使用します。

mkdir ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
cat id_rsa.pub >> ~/.ssh/authorized_keys2

(注: ~/.ssh が既に存在する場合、mkdir は失敗する可能性があります。この場合は、2 番目のコマンドを続行してください。)

于 2011-02-21T08:42:55.367 に答える
1

別のオプションは、expect スクリプトを使用することです。以下を含むファイルを作成し、/some/path/scp_expect として保存します。このファイルは、Java コードを実行するユーザーが所有する必要があります。

#!/usr/bin/expect -f

spawn scp example.tar.gz username@192.168.0.131 /root/new
expect "assword:"
send -- "password\r"
expect eof

パスワードは適宜変更してください。ファイルを実行可能にします。

chmod 700 /some/path/scp_expect

代わりに、Java コードから expect スクリプトを呼び出します。

String[] commands = new String[]{"bash", "-c", "/some/path/scp_expect"};

うまくいかない場合は"assword:"、パスワードの昇格時に表示される文字列に変更してください。

このオプションの欠点は、スクリプト内でパスワードが平文であることです。そのため、これを行うことによるセキュリティへの影響を考慮してください。キー認証方式を自分で使用することをお勧めします。

于 2011-02-21T08:56:17.637 に答える
1

これには、 JSchライブラリの方が適しています。scping ファイルのを見てみましょう。

于 2011-02-21T08:33:16.950 に答える