在写用自动任务对对账文件内容进行筛选,避免敏感信息泄露的过程中,报了一个很有意思的错误:

com.jcraft.jsch.JSchException: session is down……

利用jsch读取服务器文件,用流的形式过滤敏感信息,生成新的对账txt文件,采用的jsch是最新版本的包:

经查,sftp的访问路径要求权限必须是750或者是755,不能设置成777,我的访问路径是/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.JSch;
import com.jcraft.jsch.Session;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");/*** 利用JSch包实现SFTP下载、上传文件* * @param ip*            主机IP* @param user*            主机登陆用户名* @param psw*            主机登陆密码* @param port*            主机ssh2登陆端口,如果取默认值,传-1*/public void sshSftp() throws Exception {Session session = null;Channel channel = null;JSch jsch = new JSch();if (port <= 0) {// 连接服务器,采用默认端口session = jsch.getSession(username, ip);} else {// 采用指定的端口连接服务器session = jsch.getSession(username, ip, port);}// 如果服务器连接不上,则抛出异常if (session == null) {throw new Exception("session is null");}// 设置登陆主机的密码session.setPassword(password);// 设置密码// 设置第一次登陆的时候提示,可选值:(ask | yes | no)session.setConfig("StrictHostKeyChecking", "no");// 设置登陆超时时间session.connect(60000);try {// 创建sftp通信通道channel = session.openChannel("sftp");channel.connect(1000);ChannelSftp sftp = (ChannelSftp) channel;log.info("连接成功--");// 进入服务器指定的文件夹sftp.cd(PropertyUtils.getValue("PUBLIC_FILE_PATH"));/** // 列出服务器指定的文件列表 * Vector v = sftp.ls("*.dat"); * for (int i = 0; i < v.size(); i++) {*  String fileName = String.valueOf(v.get(i));*  log.info("第" + i + "个对账文件是:" + fileName); }*/// LCS_A3011_PAYMENT_FLOW.dat为支付流水String path = PropertyUtils.getValue("PUBLIC_FILE_PATH") + "/LCS_A3011_PAYMENT_FLOW.dat";System.err.println("进入支付对账文件路径=====" + path);String txtPayName = new DocDirect().returnDoc() + File.separator + PropertyUtils.getValue("SCHOOL_PAY_NAME");InputStream intstream = sftp.get(path); // 字节流InputStreamReader isr = new InputStreamReader(intstream); // 字符流BufferedReader br = new BufferedReader(isr); // 缓冲流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("支付数据筛选完毕!");reader.close();br.close();} catch (FileNotFoundException e) {e.printStackTrace();}// LCS_A3011_ITEM_FLOW.dat为明细流水String pathList = PropertyUtils.getValue("PUBLIC_FILE_PATH") + "/LCS_A3011_ITEM_FLOW.dat";System.err.println("进入明细对账文件路径=====" + pathList);String txtPayNameList = new DocDirect().returnDoc() + File.separator + PropertyUtils.getValue("SCHOOL_PAY_LIST_NAME");InputStream intstreamList = sftp.get(pathList); // 字节流InputStreamReader isrList = new InputStreamReader(intstreamList); // 字符流BufferedReader brList = new BufferedReader(isrList); // 缓冲流try {LineNumberReader reader = new LineNumberReader(brList);String txt = null;while ((txt = reader.readLine()) != null) {if (txt.contains("213135003")) {System.out.println("明细-----\n" + txt);appendMethod(txtPayNameList, txt);}}log.info("明细数据筛选完毕!");reader.close();br.close();} catch (FileNotFoundException e) {e.printStackTrace();}} catch (Exception e) {e.printStackTrace();} finally {session.disconnect();channel.disconnect();}}// 追加写入public static void appendMethod(String fileName, String content) {try {// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件FileWriter writer = new FileWriter(fileName, true);writer.write(content + "\n");writer.close();} catch (IOException e) {e.printStackTrace();}}// 对账文件筛选留存public void DownCheckFile() {SshUtil sshUtil = new SshUtil();try {sshUtil.sshSftp();} catch (Exception e) {e.printStackTrace();}log.info(SerialNumberTool.ConcreteDate() + "日对账文件筛选留存成功");}public static void main(String args[]) {}}

Jsch报错:com.jcraft.jsch.JSchException: session is down相关推荐

  1. jsch报错4: Failure

    在使用jsch进行sftp上传文件时出现如下异常 报错信息如下: 4: Failureat com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSf ...

  2. Kali安装fluxion报错:Aborted, xterm test session failed的解决办法

    说说我自己对出现这个问题的看法: 通过多次的尝试  发现 1.由于我的网络问题  我是用的校园网 不太稳定 (建议安装的时候使用流量+热点) 2.安装过程中自行终止(自己按了ctr+c)(所以安装过程 ...

  3. ch.ethz.ssh2.Session和com.jcraft.jsch.Session

    通过Jsch连接 step 1引入jar包 <!-- jcraft包 -->         <dependency>             <groupId>c ...

  4. Java中com.jcraft.jsch.JSch讲解

    JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...

  5. 【Azkaban报错解决】FAILED SemanticException Failed to get a spark session

    问题描述: ods_to_dwd_log报以下错误 ods_to_dim_db报一下错误 可以看出都是相同报错,无法创建spark事务 Logging initialized using config ...

  6. 解决JSCH的sftp连接时出现的com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stre

    问题描述 如题,今天遇到个问题,使用JSCH的jsch-0.1.54.jar实现的sftp在连接目标服务器时报com.jcraft.jsch.JSchException: Session.connec ...

  7. java auth fail_com.jcraft.jsch.JSchException: Auth fail

    背景 服务器信息: 服务器A:10.102.110.1 服务器B:10.102.110.2 需要从服务器A通过Sftp传输文件到服务器B. 应用项目中有一个功能,要通个关Sftp进行日志文件的传输,在 ...

  8. com.jcraft.jsch.JSchException: Auth fail

    背景 服务器信息: 服务器A:10.102.110.1 服务器B:10.102.110.2 需要从服务器A通过Sftp传输文件到服务器B. 应用项目中有一个功能,要通个关Sftp进行日志文件的传输,在 ...

  9. jsch.addIdentity invalid key报错问题

    jsch.addIdentity报错问题 JDK1.8 jsch 0.1.52 报错信息 :privatekey: invalid key - 一开始网上搜罗的信息大都是,jsch版本太低,需要对应使 ...

最新文章

  1. 开发日记-20190731 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 17
  2. PAFF 和MBAFF
  3. Spring MVC 4快速入门Maven原型已改进
  4. 被嫌弃的互联网的 “一生”(上)
  5. c#日期转换周几_C#获取每个年,月,周的起始日期和结束日期的方法
  6. ASP.NET----实现点击按钮或链接弹出登录对话框
  7. RFM 客户价值分析
  8. java 水晶按钮_报告水晶报告没有复制按钮
  9. 监听电源键的单击或长按事件
  10. Android应用推广渠道分享
  11. 11月20日云栖精选夜读:围观阿里总部:边喝茶边搞技术是一种怎样的体验?
  12. OCR文字识别软件FineReader系列产品双十一特惠!
  13. 智商情商哪个重要_情商和智商 哪个对孩子更重要?
  14. 网站选择关键词需要遵循哪些原则呢?
  15. mysql自定义函数示例代码,以及属性介绍
  16. python中file方法
  17. C语言中printf打印形式(%02X, %2X, %-2X, %.nf, %m.nf, %e, %m.ne, %2d, %-2d, %02d, %.2d)
  18. 拍照已经成为我们手机中必备的功能之一,但是我们很多人都无法使用手机原相机拍出好看的图片,这是为什么呢?
  19. python读取文件,并指定跳过的行数
  20. 09永恒之蓝与永恒之黑的复现

热门文章

  1. html的多选题,试题(多选题).html
  2. 什么是马甲包?有什么作用?
  3. 2020曼彻斯特大学计算机2020,2020年曼彻斯特大学申请要求完整版
  4. 10060 mysql_连接MySQL错误:Can't connect to MySQL server (10060)
  5. 探访上汽通用武汉奥特能超级工厂
  6. Mysql-查询并插入
  7. MSTAR软件框架!
  8. CityMaker学习教程10 示例代码的使用Javascript
  9. 树莓派3B+如何完成对产品的升级改造
  10. 3344avd_AVD生根