Jschエラー: com.jcraft.jsch.JSchException: セッションがダウンしています。
2022-02-27 21:25:22
機密情報の漏洩を防ぐために、和解ファイルの内容をフィルタリングする自動化タスクを書いている最中に、興味深いエラーが報告された。
com.jcraft.jsch.JSchException: セッションがダウンしています......。
jsch パッケージの最新版を使用して、サーバー ファイルを読み取り、ストリーム形式で機密情報をフィルタリングし、新しい調整用 txt ファイルを生成するために jsch を使用しています。
調べてみると、sftpのアクセスパスはパーミッションが777ではなく、750か755である必要があり、私のアクセスパスは/home/tomcat/dataで、意外にもすべて777:でした。
ディレクトリのパーミッションを変更し、接続に成功したら、サーバーファイルを読み込んで情報をフィルタリングし、新しい調整用ファイルを生成するコードを投稿するだけです。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ccb.ipsp.tools.DocDirect;
import com.ccb.ipsp.tools.PropertyUtils;
import com.ccb.ipsp.tools.SerialNumberTool;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch;
import com.jcraft.jsch;
public class SshUtil {
private static final Logger log = LoggerFactory.getLogger(SshUtil.class);
public String ip = PropertyUtils.getValue("PUBLIC_LOGIN_IP");
public Integer port = Integer.parseInt(PropertyUtils.getValue("PUBLIC_LOGIN_PORT"));
public String username = PropertyUtils.getValue("PUBLIC_LOGIN_USER");
public String password = PropertyUtils.getValue("PUBLIC_LOGIN_PASSWORD");
public String schoolProjectId = PropertyUtils.getValue("SCHOOL_PROJECT_ID");
/**
* Use JSch package to implement SFTP download and upload files
*
* @param ip
* Host IP
* @param user
* Host login username
* @param psw
* host login password
* @param port
* host ssh2 login port, if default, pass -1
*/
public void sshSftp() throws Exception {
Session session = null;
Channel channel = null;
JSch jsch = new JSch();
if (port <= 0) {
// Connect to the server, using the default port
session = jsch.getSession(username, ip);
} else {
// connect to the server using the specified port
session = jsch.getSession(username, ip, port);
}
// If the server cannot connect, throw an exception
if (session == null) {
throw new Exception("session is null");
}
// Set the password of the login host
session.setPassword(password); // set the password
// Set the prompt for the first login, optional values: (ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
// Set the login timeout
session.connect(60000);
try {
// Create a sftp communication channel
channel = session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
log.info("Connection successful - ");
// Access the folder specified by the server
sftp.cd(PropertyUtils.getValue("PUBLIC_FILE_PATH"));
/*
* // List the list of files specified by the server
* Vector v = sftp.ls("*.dat");
* for (int i = 0; i < v.size(); i++) {
* String fileName = String.valueOf(v.get(i));
* log.info("first" + i + "The reconciliation file is: " + fileName); }
*/
// LCS_A3011_PAYMENT_FLOW.dat is the payment flow
String path = PropertyUtils.getValue("PUBLIC_FILE_PATH") + "/LCS_A3011_PAYMENT_FLOW.dat";
System.err.println("Enter path to payment reconciliation file =====" + path);
String txtPayName = new DocDirect().returnDoc() + File.separator + PropertyUtils.getValue("SCHOOL_PAY_NAME");
InputStream intstream = sftp.get(path); // byte stream
InputStreamReader isr = new InputStreamReader(intstream); // byte stream
BufferedReader br = new BufferedReader(isr); // buffered stream
try {
LineNumberReader reader = new LineNumberReader(br);
String txt = null;
while ((txt = reader.readLine()) ! = null) {
if (txt.contains("213135003")) {
System.out.println("====\n" + txt);
appendMethod(txtPayName, txt);
}
}
log.info("Payment data filtering complete! ");
reader.close();
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// LCS_A3011_ITEM_FLOW.dat is the detailed flow
String pathList = PropertyUtils.getValue("PUBLIC_FILE_PATH") + "/LCS_A3011_ITEM_FLOW.dat";
System.err.println("Enter the path to the itemized reconciliation file =====" + pathList);
String txtPayNameList = new DocDirect().returnDoc() + File.separator + PropertyUtils.getValue("SCHOOL_PAY_LIST_NAME");
InputStream intstreamList = sftp.get(pathList); // byte stream
InputStreamReader isrList = new InputStreamReader(intstreamList); // byte stream
BufferedReader brList = new BufferedReader(isrList); // buffered stream
try {
LineNumberReader reader = new LineNumberReader(brList);
String txt = null;
while ((txt = reader.readLine()) ! = null) {
if (txt.contains("213135003")) {
System.out.println("details -----\n" + txt);
appendMethod(txtPayNameList, txt);
}
}
log.info("Detail data filtering complete! ");
reader.close();
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
channel.disconnect();
}
}
// Append write
public static void appendMethod(String fileName, String content) {
try {
// open a file writer, the second parameter true in the constructor means to write the file in append form
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\n");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// Reconcile the file to filter the retention
public void DownCheckFile() {
SshUtil sshUtil = new SshUtil();
try {
sshUtil.sshSftp();
} catch (Exception e) {
e.printStackTrace();
}
log.info(SerialNumberTool.ConcreteDate() + "Day reconciliation file filtering retention successful");
}
public static void main(String args[]) {
}
}
関連
-
解決 接続拒否:接続エラー
-
エラー: 変数 'QApplication app' はイニシャライザを持ちますが、不完全な型です。
-
ImportError: libGL.so.1: cannot open shared object file: そのようなファイルまたはディレクトリがありません 共有ライブラリがありません
-
エラー:抽象クラス型の新しい式が無効です。
-
ZipException: エントリサイズが無効です(4612を期待しましたが、241469バイトでした)。
-
OSError: [Errno 22] 無効な引数です。
-
TypeError: 'float' オブジェクトは整数として解釈できません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例