2019 Feb. 02.
https://qiita.com/nenokido2000/items/a00348c9f6a0f942773b より
import com.jcraft.jsch.*;
import java.util.Arrays;
import java.util.Hashtable;
public class Main {
/** Channel接続タイプ */
private static final String CHANNEL_TYPE = "sftp";
/**
* ファイルアップロード
*
* @param hostname
* 接続先ホスト
* @param port
* 接続先ポート
* @param userId
* 接続するユーザ
* @param identityKeyFileName
* 鍵ファイル名
* @param sourcePath
* アップロード対象ファイルのパス<br>
* アプリ実行環境上の絶対パスを指定
* @param destPath
* アップ先のパス
* @throws JSchException
* Session・Channelの設定/接続エラー時に発生
* @throws SftpException
* sftp操作失敗時に発生
*/
public void putFile(final String hostname, final int port,
final String userId, final String identityKeyFileName,
final String passPhrase,
final String sourcePath, final String destPath,
final String remotePath, final String localPath)
throws JSchException, SftpException {
Session session = null;
ChannelSftp channel = null;
try {
session = connectSession(hostname, port, userId, identityKeyFileName, passPhrase);
channel = connectChannelSftp(session);
channel.put(sourcePath, destPath);
channel.get(remotePath, localPath);
} finally {
disconnect(session, channel);
}
}
/**
* Sessionを開始
*
* @param hostname
* 接続先ホスト
* @param port
* 接続先ポート
* @param userId
* 接続するユーザ
* @param identityKeyFileName
* 鍵ファイル名
*/
private Session connectSession(final String hostname, final int port,
final String userId, final String identityKeyFileName,
final String passPhrase)
throws JSchException {
final JSch jsch = new JSch();
// HostKeyチェックを行わない
Hashtable config = new Hashtable();
config.put("StrictHostKeyChecking", "no");
jsch.setConfig(config);
// 鍵追加
jsch.addIdentity(identityKeyFileName, passPhrase );
// Session設定
final Session session = jsch.getSession(userId, hostname, port);
final UserInfo userInfo = new SftpUserInfo();
// TODO 今回は使用しないがパスフレーズ等が必要な場合はUserInfoインスタンス経由で設定する
session.setUserInfo(userInfo);
session.connect();
return session;
}
/**
* SFTPのChannelを開始
*
* @param session
* 開始されたSession情報
*/
private ChannelSftp connectChannelSftp(final Session session)
throws JSchException {
final ChannelSftp channel = (ChannelSftp) session
.openChannel(CHANNEL_TYPE);
channel.connect();
return channel;
}
/**
* Session・Channelの終了
*
* @param session
* 開始されたSession情報
* @param channels
* 開始されたChannel情報.複数指定可能
*/
private void disconnect(final Session session, final Channel... channels) {
if (channels != null) {
Arrays.stream(channels).forEach(c -> {
if (c != null) {
c.disconnect();
}
});
}
if (session != null) {
session.disconnect();
}
}
/**
* SFTPに接続するユーザ情報を保持するクラス
*/
private static class SftpUserInfo implements UserInfo {
@Override
public String getPassword() {
return null;
}
@Override
public boolean promptPassword(String arg0) {
return true;
}
@Override
public boolean promptPassphrase(String arg0) {
return true;
}
@Override
public boolean promptYesNo(String arg0) {
return true;
}
@Override
public void showMessage(String arg0) {
}
@Override
public String getPassphrase() {
return null;
}
}
public static void main(String[] args) throws JSchException, SftpException {
String Hostname="SSH-SERVER-IP-ADDRESS";
int Port=22;
String UserId="USER";
String PassPhrase = "YOUR-PASSPHRASE";
String IdentityKeyFileName=System.getProperty("user.home")+"/PRIVATEKEY";
String SourcePath=System.getProperty("user.home")+"/PATH/TO/FILE";
String DestPath="PATH/TO/DESTFILE";
String RemotePath="PATH/TO/REMOTEFILE";
String LocalPath=System.getProperty("user.home")+"/ANOTHER/PATH/TO/FILE";
final Main sftp = new Main();
sftp.putFile(Hostname, Port, UserId, IdentityKeyFileName, PassPhrase,
SourcePath, DestPath, RemotePath, LocalPath);
}
}
https://qiita.com/nenokido2000/items/a00348c9f6a0f942773b より
import com.jcraft.jsch.*;
import java.util.Arrays;
import java.util.Hashtable;
public class Main {
/** Channel接続タイプ */
private static final String CHANNEL_TYPE = "sftp";
/**
* ファイルアップロード
*
* @param hostname
* 接続先ホスト
* @param port
* 接続先ポート
* @param userId
* 接続するユーザ
* @param identityKeyFileName
* 鍵ファイル名
* @param sourcePath
* アップロード対象ファイルのパス<br>
* アプリ実行環境上の絶対パスを指定
* @param destPath
* アップ先のパス
* @throws JSchException
* Session・Channelの設定/接続エラー時に発生
* @throws SftpException
* sftp操作失敗時に発生
*/
public void putFile(final String hostname, final int port,
final String userId, final String identityKeyFileName,
final String passPhrase,
final String sourcePath, final String destPath,
final String remotePath, final String localPath)
throws JSchException, SftpException {
Session session = null;
ChannelSftp channel = null;
try {
session = connectSession(hostname, port, userId, identityKeyFileName, passPhrase);
channel = connectChannelSftp(session);
channel.put(sourcePath, destPath);
channel.get(remotePath, localPath);
} finally {
disconnect(session, channel);
}
}
/**
* Sessionを開始
*
* @param hostname
* 接続先ホスト
* @param port
* 接続先ポート
* @param userId
* 接続するユーザ
* @param identityKeyFileName
* 鍵ファイル名
*/
private Session connectSession(final String hostname, final int port,
final String userId, final String identityKeyFileName,
final String passPhrase)
throws JSchException {
final JSch jsch = new JSch();
// HostKeyチェックを行わない
Hashtable config = new Hashtable();
config.put("StrictHostKeyChecking", "no");
jsch.setConfig(config);
// 鍵追加
jsch.addIdentity(identityKeyFileName, passPhrase );
// Session設定
final Session session = jsch.getSession(userId, hostname, port);
final UserInfo userInfo = new SftpUserInfo();
// TODO 今回は使用しないがパスフレーズ等が必要な場合はUserInfoインスタンス経由で設定する
session.setUserInfo(userInfo);
session.connect();
return session;
}
/**
* SFTPのChannelを開始
*
* @param session
* 開始されたSession情報
*/
private ChannelSftp connectChannelSftp(final Session session)
throws JSchException {
final ChannelSftp channel = (ChannelSftp) session
.openChannel(CHANNEL_TYPE);
channel.connect();
return channel;
}
/**
* Session・Channelの終了
*
* @param session
* 開始されたSession情報
* @param channels
* 開始されたChannel情報.複数指定可能
*/
private void disconnect(final Session session, final Channel... channels) {
if (channels != null) {
Arrays.stream(channels).forEach(c -> {
if (c != null) {
c.disconnect();
}
});
}
if (session != null) {
session.disconnect();
}
}
/**
* SFTPに接続するユーザ情報を保持するクラス
*/
private static class SftpUserInfo implements UserInfo {
@Override
public String getPassword() {
return null;
}
@Override
public boolean promptPassword(String arg0) {
return true;
}
@Override
public boolean promptPassphrase(String arg0) {
return true;
}
@Override
public boolean promptYesNo(String arg0) {
return true;
}
@Override
public void showMessage(String arg0) {
}
@Override
public String getPassphrase() {
return null;
}
}
public static void main(String[] args) throws JSchException, SftpException {
String Hostname="SSH-SERVER-IP-ADDRESS";
int Port=22;
String UserId="USER";
String PassPhrase = "YOUR-PASSPHRASE";
String IdentityKeyFileName=System.getProperty("user.home")+"/PRIVATEKEY";
String SourcePath=System.getProperty("user.home")+"/PATH/TO/FILE";
String DestPath="PATH/TO/DESTFILE";
String RemotePath="PATH/TO/REMOTEFILE";
String LocalPath=System.getProperty("user.home")+"/ANOTHER/PATH/TO/FILE";
final Main sftp = new Main();
sftp.putFile(Hostname, Port, UserId, IdentityKeyFileName, PassPhrase,
SourcePath, DestPath, RemotePath, LocalPath);
}
}
0 件のコメント:
コメントを投稿