84

Java プログラミング言語を介して scp 転送を実行する最良の方法は何ですか? JSSE、JSch、または弾む城のJavaライブラリを介してこれを実行できるようです。これらの解決策はどれも簡単な答えではないようです。

4

15 に答える 15

59

最終的にJschを使用することになりました。これは非常に簡単で、スケールアップもうまくいったようです (数分ごとに数千のファイルを取得していました)。

于 2008-10-14T01:22:37.130 に答える
24

plug: sshj が唯一の正しい選択です! 開始するには、これらの例を参照してください:ダウンロードアップロード

于 2010-03-08T21:15:11.277 に答える
17

こちらをご覧ください

これが Ants の SCP タスクのソース コードです。「execute」メソッドのコードは、その要点です。これにより、何が必要かについての公正なアイデアが得られるはずです。それは私が信じているJSchを使用しています。

または、この Ant タスクを Java コードから直接実行することもできます。

于 2008-10-14T00:57:37.163 に答える
6

これは高度なソリューションであり、再発明する必要はありません。早くて汚い!

1)まず、http://ant.apache.org/bindownload.cgiにアクセスして、最新の Apache Ant バイナリをダウンロードします。(最近では、apache-ant-1.9.4-bin.zip)。

2)ダウンロードしたファイルを解凍し、JAR ant-jsch.jar (「apache-ant-1.9.4/lib/ant-jsch.jar」) を見つけます。この JAR をプロジェクトに追加します。また、ant-launcher.jar および ant.jar。

3) Jcraft jsch SouceForge プロジェクトに移動し、jar をダウンロードします。現在、jsch-0.1.52.jar . また、この JAR をプロジェクトに追加します

これで、ネットワーク経由でファイルをコピーするAnt Classes Scpや、SSH サーバーでコマンドを実行する SSHExecを Java コードに簡単に使用できますか。

4)コード例 Scp:

// This make scp copy of 
// one local file to remote dir

org.apache.tools.ant.taskdefs.optional.ssh.Scp scp = new Scp();
int portSSH = 22;
String srvrSSH = "ssh.your.domain";
String userSSH = "anyuser"; 
String pswdSSH = new String ( jPasswordField1.getPassword() );
String localFile = "C:\\localfile.txt";
String remoteDir = "/uploads/";

scp.setPort( portSSH );
scp.setLocalFile( localFile );
scp.setTodir( userSSH + ":" + pswdSSH + "@" + srvrSSH + ":" + remoteDir );
scp.setProject( new Project() );
scp.setTrust( true );
scp.execute();
于 2015-04-05T14:39:10.497 に答える
3

openssh プロジェクトには、いくつかの Java の代替案がリストされています。Trilead SSH for Javaは、あなたが求めているものに合っているようです。

于 2008-10-14T00:56:51.597 に答える
2

Zehonと呼ばれるSCPを持つこのSFTPAPIを使用します。これは素晴らしいので、多くのサンプルコードで簡単に使用できます。こちらがサイトhttp://www.zehon.comです。

于 2009-06-18T08:26:10.257 に答える
1

ここにあるいくつかのように、JSch ライブラリのラッパーを作成することになりました。

これは way-secshell と呼ばれ、GitHub でホストされています。

https://github.com/objectos/way-secshell

// scp myfile.txt localhost:/tmp
File file = new File("myfile.txt");
Scp res = WaySSH.scp()
  .file(file)
  .toHost("localhost")
  .at("/tmp")
  .send();
于 2014-01-08T15:46:36.700 に答える
0

フォルダーを再帰的にコピーする必要があります。さまざまなソリューションを試した後、最終的に ProcessBuilder + expect/spawn で終了します

scpFile("192.168.1.1", "root","password","/tmp/1","/tmp");

public void scpFile(String host, String username, String password, String src, String dest) throws Exception {

    String[] scpCmd = new String[]{"expect", "-c", String.format("spawn scp -r %s %s@%s:%s\n", src, username, host, dest)  +
            "expect \"?assword:\"\n" +
            String.format("send \"%s\\r\"\n", password) +
            "expect eof"};

    ProcessBuilder pb = new ProcessBuilder(scpCmd);
    System.out.println("Run shell command: " + Arrays.toString(scpCmd));
    Process process = pb.start();
    int errCode = process.waitFor();
    System.out.println("Echo command executed, any errors? " + (errCode == 0 ? "No" : "Yes"));
    System.out.println("Echo Output:\n" + output(process.getInputStream()));
    if(errCode != 0) throw new Exception();
}
于 2018-01-19T03:41:32.527 に答える
0

他のサーバーよりもはるかに簡単な scp サーバーを作成しました。Apache MINA プロジェクト (Apache SSHD) を使用して開発しています。ここで見ることができます: https://github.com/boomz/JSCP また、jar ファイルを/jarディレクトリからダウンロードすることもできます。使い方?見てみましょう: https://github.com/boomz/JSCP/blob/master/src/Main.java

于 2013-07-14T19:28:27.457 に答える