sftp是Secure File TransferProtocol的缩写,即安全文件传送协议。可以为传输文件提供一种安全的加密方法。
一.连接方式
常用的方式有两种,一种直接采用sftp连接远端服务器IP
另一种先登录远程服务器,在开启sftp功能
1.sftp[remotehost IP]
通过sftp连接[host],端口默认的22,用户为Linux当前登录用户。
2.sftp-oPort=[port][remotehost IP]
通过sftp连接远程服务器,指定端口[port],用户为Linux当前登录用户。
3.sftp[user]@[remotehost IP]
通过sftp连接远程服务器,端口默认的22,指定用户[user]
4.sftp-oPort=[port][user]@[remotehost IP]
通过sftp连接[remotehost IP],端口为[port],用户为[user]
5.通过Xshell5与linux建立连接后,在图形用户面板上 窗口-》传输新建文件,打开xftp的字符界面,直接关闭即可 打开一个sftp窗口
一.连接方式
常用的方式有两种,一种直接采用sftp连接远端服务器IP
另一种先登录远程服务器,在开启sftp功能
1.sftp[remotehost IP]
通过sftp连接[host],端口默认的22,用户为Linux当前登录用户。
2.sftp-oPort=[port][remotehost IP]
通过sftp连接远程服务器,指定端口[port],用户为Linux当前登录用户。
3.sftp[user]@[remotehost IP]
通过sftp连接远程服务器,端口默认的22,指定用户[user]
4.sftp-oPort=[port][user]@[remotehost IP]
通过sftp连接[remotehost IP],端口为[port],用户为[user]
5.通过Xshell5与linux建立连接后,在图形用户面板上 窗口-》传输新建文件,打开xftp的字符界面,直接关闭即可 打开一个sftp窗口
二.用法
1.基本用法
cd 更改远程服务器工作目录
clear 清屏
explore 导入本地目录
get 下载
Icd 切换本地当前目录
lls 列出本地当前目录的内容
lpwd 打印当前工作目录
ls 列出远程服务器目录内容
mkdir 在远程服务器上创建一个目录
mv 搬移或重命名一个的远程服务器文件
put 将本机的文件上传到远程服务器
pwd 打印远程服务器工作路径
quit 退出
rename 搬移或重命名一个的远程服务器文件
rm 删除一个文件
rmdir 在远程服务器上删除一个目录删除一个目录
explore 导入本地目录
get 下载
Icd 切换本地当前目录
lls 列出本地当前目录的内容
lpwd 打印当前工作目录
ls 列出远程服务器目录内容
mkdir 在远程服务器上创建一个目录
mv 搬移或重命名一个的远程服务器文件
put 将本机的文件上传到远程服务器
pwd 打印远程服务器工作路径
quit 退出
rename 搬移或重命名一个的远程服务器文件
rm 删除一个文件
rmdir 在远程服务器上删除一个目录删除一个目录
三.案例
通过SFTP,连接远程服务器,并从服务器上下载文件。
下载后可以打印,也可以保存到数据库。
用户需要自己手动下载 jsch包。
SFTP工具类
package com.huchi.common.utils.jsch;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Properties;
import java.util.Vector;
import org.apache.log4j.Logger;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
* @Comments : 通过SFTP,读取数据
* @Version : 1.0.0
*/
public class SFTPChannel {
Session session = null;
Channel channel = null;
private static final Logger LOG = Logger.getLogger(SFTPChannel.class);
/**
* @MethodName : getChannel
* @Description : 得到Channel
* @param sftpDetails
* @param timeout
* 超时时间
* @return
* @throws JSchException
*/
public ChannelSftp getChannel(Map<String, String> sftpDetails, int timeout)
throws JSchException {
String ftpHost = sftpDetails.get(SFTPConstants.SFTP_REQ_HOST);
String port = sftpDetails.get(SFTPConstants.SFTP_REQ_PORT);
String ftpUserName = sftpDetails.get(SFTPConstants.SFTP_REQ_USERNAME);
String ftpPassword = sftpDetails.get(SFTPConstants.SFTP_REQ_PASSWORD);
JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(ftpUserName, ftpHost, Integer.parseInt(port)); // 根据用户名,主机ip,端口获取一个Session对象
LOG.debug("Session created.");
if (ftpPassword != null) {
session.setPassword(ftpPassword); // 设置密码
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接
LOG.debug("Session connected.");
LOG.debug("Opening Channel.");
channel = session.openChannel("sftp"); // 打开SFTP通道
channel