当ssh连接linux服务器的时候传送文件很麻烦,但是用sftp就方便多了,系统有的是默认带有sftp服务的,但是有时候会存在问题导致不能使用,这时需要重新注册服务,以下步骤仅供参考。
一、创建sftp组
创建完成之后使用 cat /etc/group 命令组的信息
groupadd sftp
创建一个sftp用户mysftp并加入到创建的sftp组中,同时修改mysftp用户的密码
useradd -g sftp -s /bin/false mysftp
passwd mysftp
二、新建/data/sftp/mysftp目录,并将它指定为mysftp组用户的home目录
mkdir -p /data/sftp/mysftp
usermod -d /data/sftp/mysftp mysftp
三、编辑配置文件/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
将如下这行用#符号注释掉
# Subsystem sftp /usr/libexec/openssh/sftp-server
并在文件最后面添加如下几行内容然后保存
Subsystem sftp internal-sftp
四、设置Chroot目录权限
chown root:sftp /data/sftp/mysftp
chmod 755 /data/sftp/mysftp
五、新建一个目录供stp用户mysftp上传文件,这个目录所有者为mysftp所有组为sftp,所有者有写入权限所有组无写入权限
mkdir /data/sftp/mysftp/upload
chown mysftp:sftp /data/sftp/mysftp/upload
chmod 755 /data/sftp/mysftp/upload
六、关闭selinux并重启sshd服务,然后测试
systemctl restart sshd
七、最后,登录
使用FTP客户端测试的登录
遇到问题上传文件权限不够解决办法
sftp put权限不够
报错如下:
sftp> put play.zip ./
Uploading play.zip to /opt/library/./play.zip
remote open("/opt/library/./play.zip"): Permission denied
原因:
sftp登录以后当前所在目录的owner不是sftp登录者,也就是说当前目录没有write权限,so修改权限,再put上传。如下:
$ sudo chown mysftp -R ./ # ssh登录以后修改目录owner ./文件上传目录(sftp保存文件的目录)
$ exit
登出
$ sftp mysftp@192.168.159.129 # 重新登录sftp
mysftp@192.168.159.129's password:
Connected to 192.168.159.129.
sftp> cd /opt # 进入要上传的目录
sftp> put play.zip # 上传
Uploading play.zip to /opt/library/play.zip
play.zip 100% 74MB 10.6MB/s 00:07