Centos7搭建SFTP服务
参考文章: https://blog.csdn.net/weixin_45688268/article/details/126355365
yum install -y openssl openssh-server #更新ssh包
#新建用户组sftp
groupadd sftp
useradd -g sftp -d /data/sftp/sftpuser -M -s /sbin/nologin sftpuser
#设置sftpuser用户的密码
passwd sftpuser
[输入密码:如 12345678]
# 由于/data/sftp/sftpuser的用户是root,其它用户都没有写的权限
# 所以要在该目录下新建一个目录用于文件的上传下载
mkdir -p /data/sftp/sftpuser/files
chown sftpuser:sftp /data/sftp/sftpuser/files
chmod -R 755 /data/sftp/sftpuser/
cp -rf /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vi /etc/ssh/sshd_config ,新增(修改)内容如下
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
在最后新增内容如下:
# 注释 Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
ClientAliveInterval 60
#重启sshd服务
systemctl restart sshd
#客户端连接
sftp -P 22 sftpuser@127.0.0.1
[输入密码:12345678] 登录
SFTPUtil.java
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* SFTP操作工具类
*/
@Slf4j
public class SFTPUtil {
private String loginName ;
private String loginPassword ;
private String server ;
private Integer port ;
public SFTPUtil(String loginName, String loginPassword, String server, Integer port){
this.loginName=loginName;
this.loginPassword=loginPassword;
this.server=server;
this.port=port;
}
/**
* 连接登陆远程服务器
* @return
*/
public ChannelSftp connect() {
JSch jSch = new JSch();
Session session = null;
ChannelSftp sftp = null;
try {
session = jSch.getSession(loginName, server, port);
session.setPassword(loginPassword);
session.setConfig(getSshConfig());
session.connect();
sftp = (ChannelSftp)session.openChannel("sftp");
sftp.connect();
log.info("连接SFTP服务器成功!");
} catch (Exception e) {
log.error("SSH方式连接SFTP服务器失败!",e);
return null;
}
return sftp;
}
/**
* 获取服务配置
* @return
*/
private Properties getSshConfig() {
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
return sshConfig;
}
/**
* 关闭连接
* @param sftp
*/
public void disconnect(ChannelSftp sftp) {
try {
if(sftp!=null){
if(sftp.getSession().isConnected()){
sftp.getSession().disconnect();
}
}
} catch (Exception e) {
log.error("关闭与sftp服务器会话连接异常",e);
}
}
/**
* 写内容到远端文件 (写文本内容)
* @param content 文件文本内容
* @param remoteFileName
*/
public void writeRemoteFile(String content,String remoteFileName){
ChannelSftp sftp = null;
try {
sftp = connect();
ByteArrayInputStream input =new ByteArrayInputStream(content.getBytes());
sftp.put(input, remoteFileName);
}catch (Exception e){
log.error(e.getMessage(),e);
}finally {
try {
// 关闭连接
disconnect(sftp);
} catch (Exception e) {
log.error("关闭连接出错!",e);
}
}
}
/**
* 写文件流到远端文件
* @param in
* @param remoteFileName
*/
public void writeRemoteFile(InputStream in,String remoteFileName){
ChannelSftp sftp = null;
try {
sftp = connect();
sftp.put(in, remoteFileName);
}catch (Exception e){
log.error(e.getMessage(),e);
}finally {
disconnect(sftp);
}
}
/**
* 读取远端文件的内容 (文本读取)
* @param remoteFileName
* @return
*/
public List
ChannelSftp sftp = null;
InputStream in ;
try {
sftp = connect();
in = sftp.get(remoteFileName);
if(in==null){
log.error("获取远端文件不存在");
return null;
}
List
BufferedReader br =new BufferedReader(new InputStreamReader(in,"utf-8"));
String line;
while ((line=br.readLine())!=null){
list.add(line);
}
return list;
}catch (Exception e){
log.error(e.getMessage(),e);
return null;
}finally {
try {
// 关闭连接
disconnect(sftp);
} catch (Exception e) {
log.error("关闭连接出错!",e);
}
}
}
/**
* 读取远端文件流
* @param remoteFileName
* @return
*/
public InputStream readRemoteFileAsStream(String remoteFileName){
ChannelSftp sftp = null;
try {
InputStream in =sftp.get(remoteFileName);
if(in==null){
log.error("获取远端文件不存在");
return null;
}
return in ;
}catch (Exception e){
log.error(e.getMessage(),e);
return null ;
}finally {
disconnect(sftp);
}
}
}
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1