一、什么sftp服务器

  • sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。本身没有守护进程,是包含在ssh中,端口也是22。
  • sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装。

二、安装sftp服务器

# 创建用户组
groupadd sftpgroup

# 创建完成之后使用cat /etc/group命令组的信息
cat /etc/group

# 创建用户并且加入到这个用户组,并修改mysftp用户的密码 
useradd -g sftpgroup -M -s /sbin/nologin  mysftp
passwd  mysftp
# 密码 Java_521

# 创建/data/sftp/mysftp目录,并将它指定为mysftp组用户的home目录
mkdir -p /data/sftp/mysftp
usermod -d /data/sftp/mysftp  mysftp

# 设置Chroot目录权限
chown root:sftpgroup /data/sftp/mysftp
chmod 755 /data/sftp/mysftp

# 新建一个目录供stp用户mysftp上传文件,这个目录所有者为mysftp所有组为sftp,所有者有写入权限所有组无写入权限
mkdir -p /data/sftp/mysftp/project
chown -R mysftp:sftpgroup /data/sftp/mysftp/project
chmod 755 /data/sftp/mysftp/project

chmod 755 设置用户的权限为

  • 文件所有者可读可写可执行
  • 与文件所有者同属一个用户组的其他用户可读可执行
  • 其它用户组可读可执行

三、修改配置文件

vi /etc/ssh/sshd_config

将Subsystem sftp /usr/libexec/openssh/sftp-server 注释掉
在文件末尾添添加 加以下几行

Subsystem sftp internal-sftp
Match Group sftpgroup
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory  /data/sftp/mysftp
ForceCommand internal-sftp

四、测试sftp

重启sshd服务,然后测试 sftp 用户名@ip地址

systemctl restart sshd.service

# sftp本地登录
sftp mysftp@127.0.0.1

# 测试上传
put abc.txt

# 测试下载
get abc.txt /opt

在这里插入图片描述

问题:上传出现问题
sftp> put a.txt
Uploading a.txt to /a.txt
remote open(“/a.txt”): Permission denied
解决: chmod 777 /data/sftp/mysftp

注意
错误信息: com.jcraft.jsch.JSchException: session is down
错误位置: schUtil.createSftp()
错误原因: sftp服务器的目录权限必须是755(drwxr-xr-x),如果是777(drwxrwxrwx),则会报错。

访问图片正常,访问视频失败。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最终问题排查,公司网络问题,切换手机的热点,访问正常。

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐