JavaでSFTPサーバにファイル転送する方法【JSch入門】

はじめに

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サーバへのファイル転送が実現できます。公開鍵認証にも対応しているため、セキュアな通信が必要な業務でも活用できます。

タイトルとURLをコピーしました