はじめに
JavaでファイルをSFTPサーバへ安全に転送したい場面は多くあります。システム間連携、ログファイルのアップロード、業務自動化などが代表例です。
本記事では、SSHプロトコルを扱えるJavaライブラリ「JSch」を使って、SFTPでファイルをアップロード/ダウンロードする基本手順を解説します。
JSchとは?
- Java製のSSH2プロトコル実装ライブラリ
- パスワード/公開鍵認証に対応
- ファイル転送(SCP/SFTP)に対応
- 軽量でMaven対応
開発環境と準備
使用環境
- Java 8以上
- ライブラリ:
JSch
(com.jcraft:jsch)
Maven依存関係
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
SFTP接続してファイルをアップロードする
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.Channel;
import java.io.FileInputStream;
public class SftpUploadExample {
public static void main(String[] args) {
String host = "sftp.example.com";
String user = "your_username";
String password = "your_password";
int port = 22;
String localFile = "upload.txt";
String remoteDir = "/remote/path/";
try {
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.put(new FileInputStream(localFile), remoteDir + localFile);
sftpChannel.exit();
session.disconnect();
System.out.println("アップロード成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
SFTPからファイルをダウンロードする
sftpChannel.get("/remote/path/file.txt", "downloaded_file.txt");
System.out.println("ダウンロード完了!");
公開鍵認証を使う場合(任意)
JSch jsch = new JSch();
jsch.addIdentity("/home/user/.ssh/id_rsa");
Session session = jsch.getSession("user", "sftp.example.com", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
エラーハンドリングとセキュリティの注意点
- 例外処理を適切に書く(
JSchException
,SftpException
) - 鍵認証を推奨(パスワードのハードコーディングは避ける)
- ホスト鍵の検証を行う設定を戻す(
StrictHostKeyChecking=yes
)
よくある用途
- Javaバッチから定時アップロード
- スクレイピングデータをSFTPで集約
- クライアントアプリのレポート送信
まとめ
JSchを使えば、Javaから簡単にSFTPサーバへのファイル転送が実現できます。公開鍵認証にも対応しているため、セキュアな通信が必要な業務でも活用できます。