在Linux上配置SFTP服务

SFTP介绍

sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似。 然而,sFTP 比 FTP 更安全;它通过加密 SSH 传输处理所有操作。 它可以配置使用几个有用的 SSH 功能,如公钥认证和压缩。 它连接并登录到指定的远程机器,然后切换到交互式命令模式,在该模式下用户可以执行各种命令。

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

特点

1.  SFTP 与 FTP 有着几乎一样的语法和功能。

2.  SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。

3.  SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作

4.  SFTP安全性非常高

5.  SSH软件已经包含SFTP安全文件传输子系统


缺点

传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多

客户端工具

windos客户端

Core FTP,FileZilla, WinSCP,Xftp

linux客户端

sftp [email protected] ip(or remote host name)

服务端配置


环境概述

 ipaddress=10.168.0.169

 OS=centos 6.5

环境检查


2.2.1、查看openssh的版本

1
ssh -V

注:要求大于4.8p1版本

2.2.2、关闭selinux

1
getenforce

如果显示如下:

1
Enforcing

则执行:

1
2
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.3、配置步骤


2.3.1、创建sftp的存放目录

1
mkdir -p /data/sftp

2.3.2、创建sftp组

1
groupadd sftp

2.3.3、配置sshd传输子系统

vim编辑/etc/ssh/sshd_config

注释掉如下行:

1
# Subsystem       sftp    /usr/libexec/openssh/sftp-server

最后行添加如下参数

1
2
3
4
5
6
Subsystem      sftp internal-sftp
Match Group sftp
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp
        ChrootDirectory /data/sftp/%u

2.3.4、重启服务

1
/etc/init.d/sshd restart

2.3.5、创建sftp用户和相关目录

1
2
mkdir /data/sftp/user1/
useradd user1 -g sftp -s /bin/false -d /data/sftp/user1/upload

注:/data/sftp/user1属主必须是root,否则无法登陆。

用户根文件夹权限查看:

1
ll -d /data/sftp/user1/

显示如下:

1
drwxr-xr-x. 3 root root 4096 May 10 09:21 /data/sftp/user1

upload文件夹权限查看:

1
ll -d /data/sftp/user1/upload/

显示如下:

1
drwx------. 2 user1 sftp 4096 May 10 09:21 /data/sftp/user1/upload/

2.3.6、配置sftp用户的密码

1
passwd user1

2.3.7、配置脚本方式

1)新建脚本目录

1
mkdir ~/script

2)vim编辑~/script/addsftpu.sh并输入如下内容

1
2
3
4
5
6
#!/bin/bash
user=$1
passwd=$2
mkdir -p /data/sftp/$user/
useradd $user -g sftp -s /bin/false -d /data/sftp/$user/upload
echo "$passwd" passwd --stdin $user

3)授权

1
chmod 700 ~/script/addsftpu.sh

4)新增用户

1
2
cd ~/script
./addsftpu.sh user1 'pwd123'

SFTP在Linux上的配置

  1. 查看ssh版本 
    sftp是基于ssh协议的,首先查看ssh版本,openssh-server版本至少得是4.8p1, 因为配置权限需要版本添加的新配置项ChrootDirectory来完成。 
    [[email protected] ~]# ssh -V 
    OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

  2. 创建用户和组 
    [[email protected] ~]#groupadd sftp 
    [[email protected] ~]#useradd -g sftp -s /sbin/nologin sftp

  3. 给家目录更改属主并授权 
    家目录属主必须是root,权限可以是755或者750 
    chown root:sftp sftp 
    chmod 755 -R sftp

  4. 编辑配置文件/etc/ssh/sshd_config 
    Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉这行 
    Subsystem sftp internal-sftp #增加以下6行 
    Match Group sftp 
    ChrootDirectory /home/%u #设定属于用户组sftp的用户访问的根文件夹 
    ForceCommand internal-sftp 
    AllowTcpForwarding no 
    X11Forwarding no #设置不允许SSH的X转发

  5. 重启sshd服务 
    [[email protected] ~]#rcsshd restart 
    Stopping sshd: [ OK ] 
    Starting sshd: [ OK ]

  6. 验证是否生效 
    在另一台客户机上,使用sftp 用户@IP进行连接 
    [[email protected] share_root]# sftp [email protected] 
    Connecting to 10.20.2.23… 
    [email protected]’s password: 
    sftp> ls 
    a.txt 
    sftp> 
    常见问题: 如果你链接服务器的时候出现下面的提示: Write failed: Broken pipe Couldn’t read packet: Connection reset by peer 这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。

linux sftp 安全文件传输命令

  1. 常用登陆方式 
    格式:sftp [user]@[host] 
    通过sftp连接[host],端口为默认的22,指定用户[user]。

  2. 查看sftp支持的命令 
    sftp>help

  3. 基本的使用 
    sftp> ls #list directory 
    sftp> pwd #print working directory on remote host 
    sftp> lpwd #print working directory on local host 
    sftp> mkdir uploads #create a new directory


如何使用 sFTP 上传文件夹 
要将整个目录上传到远程 Linux 主机中,请使用put命令。但是,如果目录名称不存在于远程主机上的工作目录中,你将收到错误,如下面的屏幕截图所示。 
因此,首先在远程主机上创建一个具有相同名称的目录,然后从本地主机上传它,-r参数允许拷贝子目录和子文件: 
sftp> put -r Tecmint.com-articles 
sftp> mkdir Tecmint.com-articles 
sftp> put -r Tecmint.com-articles 
在Linux上配置SFTP服务 
要保留修改时间、访问时间以及被传输的文件的模式,请使用-p标志。 
sftp> put -pr Tecmint.com-articles如何使用 sFTP 下载文件夹 
要从远程 Linux 主机下载整个 fstools-0.0 文件夹到本机中,如下所示使用 get 命令带上-r标志: 
sftp> get -r fstools-0.0 
在Linux上配置SFTP服务 
使用 sFTP 下载目录 
如果文件夹已经下载完成了,接着查看本机的工作目录。 
要退出 sFTP shell,输入: 
sftp> bye或者sftp> exit

使用XSHELL连接SFTP

xftp是完全图形化操作的 
Xftp下载地址:http://www.jb51.net/softs/81853.html 
在xftp里新建一个连接,注意协议需要选择SFTP,然后依次填写IP、账户和密码并连接登录。 
在Linux上配置SFTP服务 
默认进入的是用户的 /root 目录下。此时就可以将文件上传到服务器里了。需要注意的是这时候上传的文件的拥有者和拥有组都是当前登录的用户。 
在Linux上配置SFTP服务