jsch

在java中使用SFTP协议安全的传输文件

偶尔善良 提交于 2020-10-27 03:25:55
本文介绍在Java中如何使用基于SSH的文件传输协议(SFTP)将文件从本地上传到远程服务器,或者将文件在两个服务器之间安全的传输。我们先来了解一下这几个协议 SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。比如:我们购买的云服务器登陆的时候使用的协议都是ssh。 ftp协议通常是用来在两个服务器之间传输文件的,但是它本质上是不安全的。 那么SFTP是什么?SFTP可以理解为SSH + FTP,也就是 安全的 网络文件传输协议。 一般来说,SFTP和FTP服务都是使用相应的客户端软件来提供服务。如果你希望在java代码中使用SFTP协议进行安全的文件传输,那么这篇文章非常适合你。 1. 导入JSch 依赖包 在maven项目pom.xml中导入如下的坐标,我们使用JSch,JSch将SFTP协议封装为对应的API供我们调用。 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency> 2. 文件传输 – JSch例子 2.1 get与put方法 在中 JSch ,我们可以使用 put 和 get 在服务器之间进行文件传输。 put 方法用来将文件从本地系统传输到远程服务器。 channelSftp

同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!

不羁岁月 提交于 2020-10-02 14:55:27
最近线上监控 SFTP 连接频繁爆表,通过重启某个系统,连接数迅速下降,系统就能恢复正常,初步判断是应用程序连接未关闭的问题导致的。 栈长通过 IDE 全局搜索排查,SFTP 连接使用了 jsch 包,确实有一些功能点使用了 SFTP 连接而未关闭的情况,或者不在 finally 语句块中正常关闭。 整改上线后,SFTP 还是爆表…… 事后运维心态都要崩了,运维主动写了个 SFTP 连接监控,当连接超过 5 分钟空闲时就主动断开。 但这只是临时的处理,真正的原因肯定还是应用程序没有正常关闭导致的,于是再认真排查下程序,终于找出了元凶。。 下面是示例代码: Session session = null; ChannelSftp channel = null; try{ for(...){ ... // 创建会话 JSch jsch = new JSch(); jsch.getSession(host, username); session = jsch.getSession(username, host, port); session.setPassword(password); session.connect(); // 创建sftp连接 channel = session.openChannel("sftp"); channel.connect(); ... } } catch(

同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!

牧云@^-^@ 提交于 2020-10-02 12:54:10
最近线上监控 SFTP 连接频繁爆表,通过重启某个系统,连接数迅速下降,系统就能恢复正常,初步判断是应用程序连接未关闭的问题导致的。 栈长通过 IDE 全局搜索排查,SFTP 连接使用了 jsch 包,确实有一些功能点使用了 SFTP 连接而未关闭的情况,或者不在 finally 语句块中正常关闭。 整改上线后,SFTP 还是爆表…… 事后运维心态都要崩了,运维主动写了个 SFTP 连接监控,当连接超过 5 分钟空闲时就主动断开。 但这只是临时的处理,真正的原因肯定还是应用程序没有正常关闭导致的,于是再认真排查下程序,终于找出了元凶。。 下面是示例代码: Session session = null; ChannelSftp channel = null; try{ for(...){ ... // 创建会话 JSch jsch = new JSch(); jsch.getSession(host, username); session = jsch.getSession(username, host, port); session.setPassword(password); session.connect(); // 创建sftp连接 channel = session.openChannel("sftp"); channel.connect(); ... } } catch(

If I use JSch from more than one thread, how should I use it

南笙酒味 提交于 2020-08-19 06:43:42
问题 Since connection creation takes up quite a few times, and I'd like to connect to multiple hosts, I started to use JSch from multiple threads. However I get some nasty exceptions, which I think is because of JSch being not thread-safe. How should I use it, that it not throws any exception, which is due to the not-thread-safety of JSch? Stacktrace: com.jcraft.jsch.JSchException: connection is closed by foreign host at com.jcraft.jsch.Session.connect(Session.java:269) at com.jcraft.jsch.Session

ftp-ftps-sftp的工具类

夙愿已清 提交于 2020-08-16 00:42:03
pom.xml的依赖,由依赖commons-httpclients的老板3.1其实也没有用到,需要修改。 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-httpclient/commons

通过java程序(JSch)运行远程linux主机上的shell脚本

倖福魔咒の 提交于 2020-08-13 03:30:58
如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 运行远程主机上的shell脚本 下面的例子是教给大家如何通过java程序,运行远程主机上的shell脚本。(我讲的不是一个黑客学习教程,而是使用用户名密码去执行有用户认证资格的主机上的shell脚本)。并且通过java程序获得shell脚本的输出。 首先通过maven坐标引入 JSch 依赖库,我们正是通过JSch去执行远程主机上的脚本。 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency> 当然以下java代码可执行的的前提是,远程主机已经开通SSH服务(也就是我们平时登录主机所使用的服务)。 远程shell脚本 下面的代码放入一个文件: hello.sh ,脚本的内容很简单只是用来测试,回显输出“hello <参数1> ” #! /bin/sh echo "hello $1\n"; 然后我把它放到远程主机的 /root 目录下面,远程主机的IP是 1.1.1.1

Camel SFTP component - SSH private key URI works with privateKeyFile, doesn't work with privateKey

被刻印的时光 ゝ 提交于 2020-08-08 15:44:45
问题 I have a camel route that looks like the next one: from("direct:download") .pollEnrich() .simple("sftp://my.host:22/folder/?username=foo&fileName=${header.CamelFileName} &privateKeyFile=src/main/resources/privateSSHKey") .to("file://state/downloaded"); The file src/main/resources/privateSSHKey is an RSA private key. That works without a problem : JSCH (library used by Camel for the SFTP endpoint) manages to connect and download the desired file. The previous setup is ok while developing,

Invalid private key when opening SSH tunnel with JSch

筅森魡賤 提交于 2020-07-15 08:20:50
问题 With JSch I'm calling addIdentity() to add a private key and getSession() to open an SSH tunnel. When running this code locally on my Windows machine the opening of the tunnel is working. However when running that same code with the same private key on our CI the following error occurs: 2016-12-07 01:01:32 ERROR SSHConnector:25 - invalid privatekey: [B@4bb4de6a com.jcraft.jsch.JSchException: invalid privatekey: [B@4bb4de6a at com.jcraft.jsch.KeyPair.load(KeyPair.java:747) at com.jcraft.jsch

Invalid private key when opening SSH tunnel with JSch

≡放荡痞女 提交于 2020-07-15 08:18:32
问题 With JSch I'm calling addIdentity() to add a private key and getSession() to open an SSH tunnel. When running this code locally on my Windows machine the opening of the tunnel is working. However when running that same code with the same private key on our CI the following error occurs: 2016-12-07 01:01:32 ERROR SSHConnector:25 - invalid privatekey: [B@4bb4de6a com.jcraft.jsch.JSchException: invalid privatekey: [B@4bb4de6a at com.jcraft.jsch.KeyPair.load(KeyPair.java:747) at com.jcraft.jsch

Invalid private key when opening SSH tunnel with JSch

左心房为你撑大大i 提交于 2020-07-15 08:18:27
问题 With JSch I'm calling addIdentity() to add a private key and getSession() to open an SSH tunnel. When running this code locally on my Windows machine the opening of the tunnel is working. However when running that same code with the same private key on our CI the following error occurs: 2016-12-07 01:01:32 ERROR SSHConnector:25 - invalid privatekey: [B@4bb4de6a com.jcraft.jsch.JSchException: invalid privatekey: [B@4bb4de6a at com.jcraft.jsch.KeyPair.load(KeyPair.java:747) at com.jcraft.jsch