1.1 文件存储SFTP服务安装
1.1.1 创建SFTP用户组
创建SFTP使用者专用的用户组,命令如下(红色字体可修改):
groupadd sftp
1.1.2 创建SFTP用户
创建程序所使用的SFTP用户,命令如下(红色字体可修改):
useradd -M -g sftp -s /sbin/nologin sftpuser
修改新建帐号密码
1.1.3 创建SFTP目录
创建SFTP所使用的目录,此目录需要创建在共享存储上,命令如下(红色字体可修改):
mkdir -p /cms/sftp/file
修改创建目录的所属用户组和用户
chown sftpuser:sftp /cms/sftp/file
修改创建目录的权限,命令如下(红色字体可修改):
chmod 700 /cms/sftp/file
1.1.4 设置SFTP访问权限
编辑/etc/ssh/sshd_config文件,添加SFTP的访问权限,将下面内容添加到文件最下面(红色字体可修改):
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /cms/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
注意:ChrootDirctory配置SFTP服务的根目录,需要设置到新创建SFTP目录的上一级目录,如果设置到新创建SFTP目录,会导致SFTP无法登录
1.1.5 启动SFTP服务
启动SFTP命令:/etc/init.d/sshd start
重启SFTP命令:/etc/inti.d/sshd restart
1.1.6 问题处理
1.如果SFTP无法连接或无法上传文件,关闭SELinux服务即可
1.1.7 配置
1.如果SFTP无法连接或无法上传文件,也可能是ftpPath 路径问题 会出现异常
SFTP Upload Exception
2: No such file
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2289)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:1822)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:268)
at com.ultrapower.nismp.util.ftp.SftpUtil.upload(SftpUtil.java:61)
at com.ultrapower.nismp.server.service.file.impl.FileServiceImpl.upload(FileServiceImpl.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy25.upload(Unknown Source)