Centos6.5搭建sftp服务器
SFTP,即 SSH 文件传输协议( SSH File Transfer Protocol ),或者说是安全文件传输协议( Secure File Transfer Protocol )。SFTP 是一个独立的 SSH 封装协议包,通过安全连接以相似的方式工作。它的优势在于可以利用安全的连接传输文件,还能浏览本地和远程系统上的文件系统。
在很多情况下,使用SFTP都比FTP更可取,因为它具有最基本的安全特性和能利用 SSH 连接的能力,FTP是一种不安全的协议,只能在有限的情况下或在您信任的网络上使用。
服务器 OpenSSH-Server 版本最低4.8p1,因为低版本不支持新配置项 ChrootDirectory ,而此处需要ChrootDirectory来配置权限
当然配置时请关闭防火墙和selinux
###系统环境
主机名 | 服务器IP | openssl版本 | openssh版本 |
sftp | 172.17.0.2 | OpenSSL 1.0.1e-fips | OpenSSH_5.3p1 |
安装软件
# yum -y install openssl openssh-server openssh-clients
配置用户组
# groupadd sftp
# useradd -g sftp -s /sbin/nologin mysftp
# echo mypass | passwd --stdin mysftp
# mkdir -p /data/sftp/mysftp
# usermod -d /data/sftp/mysftp mysftp
配置sshd服务,编辑 /etc/ssh/sshd_config
注释此行
#Subsystem sftp /usr/libexec/openssh/sftp-server
在此行下面添加如下内容:
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
ChrootDirectory /data/sftp/ # 限制用户的根目录
ForceCommand internal-sftp # 只能用于sftp登录
AllowTcpForwarding no # 禁止用户使用端口转发
X11Forwarding no # 禁止用户使用端口转发
设定Chroot目录权限及sftp用户登陆后可写入的目录
# chown root.sftp /data/sftp/mysftp #文件夹所有者必须是root,用户组可以不是root。
# chmod 755 /data/sftp/mysftp #权限不能超过755但不包括755,否则会导致登录报错。
# mkdir /data/sftp/mysftp/upload #创建用户上传目录
# chown mysftp.sftp /data/sftp/mysftp/upload #
# chmod 755 /data/sftp/mysftp/upload
测试sftp服务器能否登录、上传、下载
- 测试登录
测试结果如下,则sftp服务正常登录
# sftp -p22 mysftp@172.17.0.2m1ysftp@172.17.0.2’s password:
Connected to mysftp@172.17.0.2.
sftp>
若出现一下情况:
# sftp -p22 mysftp@172.17.0.2 packet_write_wait: Connection to 172.17.0.2 port 22: Broken pipe
Couldn’t read packet: Connection reset by peer
出现以上情况的原因是:/data/sftp/mysftp 目录权限分配不当所致,将此目录的所有者更改为root即可,用户组可为root/sftp。
- 测试上传
登录服务器
# sftp> put vars.yml
Uploading vars.yml to /upload/vars.yml
vars.yml
- 测试下载
登录服务器
# sftp> get vars.yml /tmp
Fetching /upload/vars.yml to /tmp/vars.yml
/upload/vars.yml
- 测试删除
登录服务器
# sftp> rm vars.yml
Removing /upload/vars.yml
小技巧
- 登录sftp服务器后,可以使用部分shell命令,在shell命令前添加l,可以对本地主机操作。例如ls、lls、pwd、lpwd、cd、lcd等命令