|
- import java.util.Hashtable;
-
- import com.jcraft.jsch.ChannelSftp;
- import com.jcraft.jsch.JSch;
- import com.jcraft.jsch.JSchException;
- import com.jcraft.jsch.Session;
- import com.jcraft.jsch.SftpException;
-
- /**
- * SFTP転送クラス
- * 鍵認証方式、パスワード方式のどちらでも接続可能。
- * 接続にはJSch(0.1.51)を使用。
- *
- */
- public class SftpUtil {
-
- private String hostName = "";
- private String userId = "";
- private String password = "";
- private String knownhosts = "";
- private String privateKey = "";
-
- private final int port = 22;
-
- /**
- * コンストラクタ
- *
- * @param _hostName 接続先のURL
- * @param _userId ユーザーID
- * @param _password パスワード ※秘密鍵を指定している場合は省略可能
- * @param _knownhosts known_hosts(公開鍵)のフルパス ※秘密鍵を指定している場合は省略可能
- * windows7のTeraTermの場合はC:\Users\(ユーザー名)\AppData\Local\VirtualStore\Program Files\teraterm\ssh_known_hosts
- * @param _priveteKey 秘密鍵のフルパス
- */
- public SftpUtil(String _hostName, String _userId, String _password, String _knownhosts, String _priveteKey) {
- hostName = _hostName;
- userId = _userId;
- password = _password;
- knownhosts = _knownhosts;
- privateKey = _priveteKey;
- }
-
- /**
- * リモートホストへ接続
- *
- * @return
- * @throws JSchException
- */
- private Session connect() throws JSchException {
- JSch jsch = new JSch();
- Session session = null;
-
- try {
- if (privateKey != null && privateKey.length() > 0) {
- // 秘密鍵の設定
- jsch.addIdentity(privateKey);
- }
-
- if (knownhosts != null && knownhosts.length() > 0) {
- // known_hosts(公開鍵)の設定
- jsch.setKnownHosts(knownhosts);
- }
- else {
- Hashtable config = new Hashtable();
- // 公開鍵の指定が無い場合は、厳密なチェックを行わないように設定しておく必要がある
- config.put("StrictHostKeyChecking", "no");
- JSch.setConfig(config);
- }
-
- session = jsch.getSession(userId, hostName, port);
-
- if (privateKey == null || privateKey.length() == 0) {
- // 秘密鍵が指定されていない場合はパスワードを設定
- session.setPassword(password);
- }
-
- session.connect();
- return session;
- }
- catch (JSchException ex) {
- throw ex;
- }
- }
-
- /**
- * SFTPでローカルファイルをリモートへ転送
- *
- * @param from 転送したいローカルファイルのフルパス
- * @param dist 転送先のパス
- * @throws JSchException
- * @throws SftpException
- */
- public void put(String from, String dist) throws JSchException, SftpException {
- Session session = null;
- ChannelSftp channel = null;
-
- try {
- // リモートホストへ接続
- session = connect();
-
- // SFTP開始
- channel = (ChannelSftp) session.openChannel("sftp");
- channel.connect();
- }
- catch (JSchException ex) {
- throw ex;
- }
-
- try {
- // ファイル名を取得
- String[] tmp = from.split("/");
- String fileName = tmp[tmp.length - 1];
-
- // 転送先のパスへ移動
- channel.cd(dist);
-
- // ファイル転送
- channel.put(from, fileName);
- }
- catch (SftpException ex) {
- throw ex;
- }
- finally {
- if (channel != null) {
- channel.disconnect();
- }
-
- if (session != null) {
- session.disconnect();
- }
- }
- }
- }
-
|
【使用例】
// 鍵認証方式で接続する場合
SftpUtil util = new SftpUtil("接続先URL", "ユーザID", null, null, "鍵ファイルのフルパス");
// パスワード方式で接続する場合 ※パスワード方式は未検証。たぶん動くはずです(^^;
SftpUtil util = new SftpUtil("接続先URL", "ユーザID", "パスワード", null, null);
try {
util.put("C:/Temp/test.txt", "/home/testUser/");
}
catch (JSchException | SftpException e) {
e.printStackTrace();
}
|
戻る
|
|