当系统与系统之间的通信需要大文件共享数据,并且是远程的关系,很多时候都会用到安全的文件传输协议SFTP。
到目前为止,碰到了两种关于SFTP的链接方式:
- 基于用户名密码的方式连接SFTP;
- 基于密匙的方式连接SFTP(可以无密码登陆);
两种的主要区别在于后者需要有SFTP服务器的密匙文件、以专网IP(SFTP服务端只允许报备过的IP访问)开放的形式获取文件,这样的安全性应该更高些。
以下是基于jsch的两种连接方式:
/** 用户名密码的方式连接SFTP * @param host * @param port * @param username * @param password * @return */ public ChannelSftp connect(String host, int port, String username, String password) throws JSchException{ ChannelSftp csftp = null; JSch jsch = new JSch(); Session sshSession = jsch.getSession(username, host, port); sshSession.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect();//可设置超时时间 Channel channel = sshSession.openChannel("sftp"); channel.connect();//可设置超时时间 csftp = (ChannelSftp)channel; return csftp; } /** * 支持密钥的方式登陆 * @param ip * @param username * @param password 非必须 * @param port * @param privateKey 必须,由远程SFTP服务器生成提供并存放在客户端服务器上 * @param passphrase 非必须 */ public ChannelSftp connectWithKey(String ip, String username, String password, int port, String privateKey, String passphrase) throws Exception{ JSch jsch = new JSch(); if (privateKey != null && !"".equals(privateKey)) {//设置密钥和密码 if (passphrase != null && "".equals(passphrase)) {//设置带口令的密钥 jsch.addIdentity(privateKey, passphrase); } else { jsch.addIdentity(privateKey);//设置不带口令的密钥 } } Session session = null; if(port <=0){//连接服务器,采用默认端口 session = jsch.getSession(username, ip); }else{//采用指定的端口连接服务器 session = jsch.getSession(username, ip ,port); } if (session == null) {//如果服务器连接不上,则抛出异常 throw new Exception("session is null"); } if(StringUtils.isNotBlank(password))//密码不为空则设置密码 session.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no");//设置第一次登陆的时候提示,可选值:(ask | yes | no) session.setConfig(sshConfig); session.connect();//设置登陆超时时间 Channel channel = (Channel)session.openChannel("sftp");//创建sftp通信通道 channel.connect(); ChannelSftp sftp = (ChannelSftp)channel; return sftp; } /** * 密钥方式调用示例 * 其中"/usr/local/.ssh/xxx_remote_rsa"为SFTP服务器生成并提供给调用客户端服务器,并存放在客户端服务器上 * @return * @throws SftpException */ public void doVisit(){ try{ ChannelSftp sftp = ftp.connectWithKey(host, username, null, port, "/usr/local/.ssh/xxx_remote_rsa",null);//支持密钥的方式登陆 }catch(Exception e){ e.printStackTrace(); } }
相关推荐
主要介绍了详解Java使用Jsch与sftp服务器实现ssh免密登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
JSch - Java实现的SFTP(文件上传详解篇)
利用com.jcraft.jsch进行SFTP下载文件,方便简单快捷操作SFTP
jsch-0.1.53 不支持修改编码格式,sftp.setFilenameEncoding("GBK");这样修改是不起作用的,所以必须修改源码。此处是修改源码后重新导出的jar包。
jsch实现sftp文件上传、下载文件,提供jsch jar
主要为大家详细介绍了java使用JSCH实现SFTP文件管理,实现上传、下载等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
是使用java使用JSCH进行连接远程服务器的Demo,让更多刚刚接触的同学进行学习。
基于jsch包实现远程服务器的sftp访问,并可远程发送命令执行,可以配合https://download.csdn.net/download/u011230766/10710755,实现密钥登录,类KeyGen用于生成非对称密钥
java 实现 sftp 文件上传下载 等操作。
jsch.jar java使用sftp实现上传下载文件 ,包含jar包 及 实现的工具类 ,供各位参考
JSch - Java实现的SFTP(文件上传/下载详解篇)
sftp解决上传中文乱码,sftp.setFilenameEncoding("GBK");修改是不起作用的,修改源码后重新导出的jar包。
ftp的连接、上传文件、下载文件、删除文件,是通过apache提供的jar包实现
ChannelSftp.java java后台连接并登录登出sftp所需的实体
java进行ssh协议连接的jar包,jsch-0.1.54.jar,使用这一个jar即可
java连接资源jsch0.1.63版本jar包,支持openssh 9.6版本中的ssh-ed25519算法.
jsch-0.1.42.jar和一个例子。用java实现SFTP的例子
csv导出使用的使用的是univocity-parsers的支持类库,sftp上传采用的是jsch的类库,两者结合实现了数据导出成csv文件并上传指定服务器
主要介绍了Java中通过jsch来连接远程服务器执行linux命令的相关资料,需要的朋友可以参考下