[Java] Apache MINA SSHDでSCPクライアントを作る(圧縮転送)


2017/4/25 作成

・Java
・SCP Client
・Compression(圧縮転送)ができる
・ファイル出力しなくてもよい(=メモリにそのまま読める)

という条件で、SCPクライアントのJavaライブラリをいろいろ試してみたのだが、
どれもビミョーに条件を満たさず、悪戦苦闘の末に行き着いたのがApache MINA SSHDだった。
ただこれも、ドキュメントが不足にネットの実装例も古かったりと苦戦させられた。

なのでここに結果をメモをする。

https://github.com/apache/mina-sshd

MinaSCP.java

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.sshd.client.SshClient;
import org.apache.sshd.client.scp.ScpClient;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.common.compression.BuiltinCompressions;
import org.apache.sshd.common.compression.CompressionFactory;

public class MinaSCP {

	public static void main(String[] args) throws Exception {

		String hostname = "192.168.1.1";
		int port = 22;

		String user = "username";
		String password = "password ";

		String remotefilepath = "/home/username/hoge.txt";

		Long timeout = 10000L;

		SshClient client = SshClient.setUpDefaultClient();

		// 圧縮転送の設定(手元の環境だとdelayedZlibは使えてzlibは使えなかった)
		List<CompressionFactory> fs = new ArrayList<CompressionFactory>();
		fs.add(BuiltinCompressions.delayedZlib);
		fs.add(BuiltinCompressions.zlib);
		fs.add(BuiltinCompressions.none);
		client.setCompressionFactories(NamedFactory.setUpBuiltinFactories(false, fs));

		client.start();

		ClientSession session = client.connect(user, hostname, port).verify(timeout).getSession();

		session.addPasswordIdentity(password);

		session.auth().verify(timeout);

		ScpClient scp = session.createScpClient();

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		scp.download(remotefilepath, baos);

		System.out.println(baos.toString());

		client.stop();
	}
}

pom.xml

		<!-- https://mvnrepository.com/artifact/org.apache.sshd/sshd-core -->
		<dependency>
			<groupId>org.apache.sshd</groupId>
			<artifactId>sshd-core</artifactId>
			<version>1.4.0</version>
		</dependency>

秋の乗鞍岳

紅葉の乗鞍岳登山
2014/9/27~28

27日

13時
国道158沿いの蕎麦屋の湧き水
(この頃すでに御嶽山が噴火していたのだが気づいてなかった)
IMG_0845s

15時
乗鞍岳山頂行きシャトルバスの乗り場
タクシーの運転手に声をかけられる
(勉強して)6千円くらいで山頂まで連れて行ってくれるらしい
が、バスで向かうことに
運賃は往復で2500円程度、登りは15時30分が最終だった

このあたりでもすでに標高があり涼しく、シラカバの木が目立つ
IMG_0854s

16時
山頂行きバスの車中にて
紅葉は鮮やかだが、あいにく雲の中
続きを読む