基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录)。

1、如果只想让某些用户只能使用 sftp 操作文件, 而不能通过ssh进行服务器的管理,就需要先创建只能进行 sftp操作的帐号户(账户名随便起),如果sftp和ssh功能都需要,那么本地用户就可以,不需要新建。

2、限定用户的活动目录,使用户只能在指定的目录下活动,通过/etc/ssh/sshd_config配置文件的 ChrootDirectory 选项进行设置,需要进行ssh管理的帐号不要添加这个选项,添加完了以后ssh会不能登录,后面会说明。

一、新建用户和用户组

我们先添加用户名为test的用户和组名为test的组,只能进行 sftp操作的帐号户

#添加用户组 gtest
root@CentOS:~# groupadd gtest
#添加用户test 指定家目录 指定用户组
root@CentOS:~# useradd -d /home/test -m -g gtest test

如果只允许用户进行sftp操作,可以在命令后面加上-s /bin/false参数
#设置用户密码
root@CentOS:~# passwd test

二、设定你想要限定的活动目录
root@CentOS:~# mkdir  /home/sftp
#配置权限 注意此目录如果用于后续的 chroot 的活动目录,目录开始一直往上到系统根目录为止的目录拥有者都只能是root!!!
root@CentOS:~# chown  root  /home/sftp/         #其实这个是不必要的因为我是用root创建的用户

三、用户既可以sftp传输文件又能 ssh 登录到服务器的配置方法

开启ssh服务的sftp子系统,添加下面选项中的一个到配置文件/etc/ssh/sshd_config不可以同时添加

root@CentOS:~#vi /etc/ssh/sshd_config

Subsystem      sftp    /usr/libexec/openssh/sftp-server     #此选项默认已经存在

Subsystem      sftp    internal-sftp                        #此选项默认不存在

Subsystem选项的作用
配置外部子系统(例如文件传输守护程序)。参数应该是子系统名称(sftp)和在子系统请求时执行的命令(带有可选参数)。
如果命令为 /usr/libexec/openssh/sftp-server则sftp以独立进程的方式运行sftp服务。会在服务器上为sftp开启一个独立的进程,默认的选项,当客户端通过sftp命令登录服务器的时候,在服务器上可以查看到相应的进行:
-----------------------------------------
root@CentOS:~# ps -A | grep sftp
 1502 ?        00:00:00 sftp-server
-----------------------------------------
如果命令为internal-sftp 则sftp以ssh进程内方式运行sftp服务,不用为 sftp 再开一个进程,此时当客户端通过sftp命令登录服务器的时候,在服务器上就查看不到相应的进行了,不是默认的选项,需要先删除或注释掉默认选项,如果启用ChrootDirectory选项(限定用户的活动目录)就必须用这个命令,要不然就会在客户端通过sftp命令登录时候提示下面的错误:
-----------------------------------------
pipci@ubuntu:~$ sftp laopi@192.168.1.139
laopi@192.168.1.139's password:
Connection closed
-----------------------------------------

添加上面其中的任何一个选项后,就可以正常的通过sftp传输文件了,同时ssh登录也是可以的。

四、如果希望用户只能sftp传输文件而不能 ssh 登录到服务器,而且要限定用户的活动目录(锁定用户的根目录),继续看下面的配置

配置/etc/ssh/sshd_config文件
-------------------------------------------------------------
#注释掉这行
#Subsystem sftp /usr/libexec/openssh/sftp-server
#添加在配置文件末尾
Subsystem sftp internal-sftp                   #指定sftp以ssh进程内方式运行sftp服务
Match User test                                #该参数指定以下的行将仅仅匹配test用户
ChrootDirectory /home/sftp/               #用chroot将指定用户的根目录,有权限要求,看下面注释
ForceCommand internal-sftp                     #强制执行internal-sftp命令而忽略客户端提供的任何命令

--------------------------------------------------------------

1、Match选项的用法:
Match [User|Group] userName|groupName

Match后面可以是用户也可以是用户组,Match 会对匹配到的用户或用户组起作用,同时该选项只会对该行下面的选项进行匹配,不会对全局配置起作用。所以只有在这里添加的用户
并且下面的选项也加上,才只能sftp传输文件而不能 ssh 登录到服务器,例如上面的test用户,如果本地的用户没做其他限制还是可以ssh 登录到服务器。
2、ChrootDirectory选项的用法:  
这个选项是用来设定用户的可活动目录,可以用 %h 标识用户家目录 %u 代表用户名 当 Match 匹配的用户登录后 会话的根目录会切换至此目录 这里要尤其注意下面几个问题

ChrootDirectory 目录开始一直往上到系统根目录为止的目录拥有者都只能是root,权限最大为 0755,这一点必须要注意而且符合 ,所以如果以非 root 用户登录时,我们需要在 ChrootDirectory 目录下新建一个登录用户有权限操作的目录

ChrootDirectory 一旦设定 则相应的用户(上面的例子为test用户)登录时会话的根目录 "/" 切换为此目录(如过不理解可以网上差下chroot的作用),如果此时相应的用户使用 ssh 而非 sftp 协议登录,则很有可能会被提示:

/bin/bash: No such file or directory

这则提示非常的正确,对于此时登录的用户,会话中的根目录 "/" 已经切换为你所设置的 chroot 目录,除非你的 chroot 就是系统的 "/" 目录,否则此时的 chroot/bin 下是不会有 bash 命令的,这就类似添加用户时设定的 -s /bin/false 参数,shell 的初始命令式 /bin/false 自然就无法远程 ssh 登录了

3、ForceCommand 选项的用法

这个选项用来强制执行这里指定的命令,忽略客户端提供的任何命令和脚本(如果存在),通常用于 Match 块中。 强制用户登录会话时使用的初始命令 如果如上配置了此项 则 Match 对应的用户只能使用 sftp 协议登录,而无法使用 ssh 登录 ,如果ssh登录会被提示

This service allows sftp connections only.

再次强调:

1、chroot 可能带来的问题,因为 chroot 会将会话的根目录切换至此,所以 ssh 登录很可能会提示 /bin/bash: No such file or directory 的错误,因为此会话的路径会为 chroot/bin/bash

2、ForceCommand 为会话开始时的初始命令 如果指定了比如 internal-sftp,则会提示 This service allows sftp connections only. 这就如同 usermod -s /bin/false 命令一样,用户登录会话时无法调用 /bin/bash 命令,自然无法 ssh 登录服务器

五、关闭SElinux

vi  /etc/selinux/config

SELINUX=disabled      #找到这项改成这个配置

如果不关闭SElinux,那么sftp 登陆成功后,没有读的权限,有如下的报错
---------------------------------------
sftp> ls
remote readdir("/"): Permission denied
---------------------------------------
六、配置完成 重启 服务器,使SElinux和ssh配置生效

root@CentOS:~# shutdown -r now

七、sftp命令用法:

1、登录到远程主机

pipci@ubuntu:~$ sftp user@ip

建立连接后, linux shell中的$提示符变成了sftp>  说明已经正常登录了。现在执行help, 可以看看sftp支持哪些命令。

2、切换路径
sftp> cd   [路径]   切换远程主机的目录
sftp> lcd  [路径]   切换本地主机的目录

2、显示目录列表
sftp> ls   [选项]  [路径]  显示远程主角目录列表
sftp> lls  [选项]  [路径]  显示本地主机目录列表

3、创建 删除目录
sftp> mkdir   [目录名]   在远程主机创建目录
sftp> lmkdir  [目录名]   在本地主机创建目录
sftp> rmdir   [目录名]   在远程主机移除目录
sftp> lrmdir  [目录名]   在本地主机移除目录

4、显示所在目录
sftp> pwd    显示远程主机工作目录
sftp> lpwd   显示本地主机工作目录

5、其他选项
sftp> rm        删除远程主机文件
sftp> version   显示协议版本
sftp> exit      退出 sftp
sftp> quit      退出 sftp
                  
6、远程主机下载文件
sftp> get [-r] [远端主机目录或文件] [本地主机目录]    
进行文件下载的sftp用户必须对本地主机的对应目录有写的权限,如果不指定本地主机目录则文件会存储到sftp登录时的本地当前目录。举例:下载文件
----------------------------------------------
sftp> get /test/tif  /home/pipci
Fetching /test/tif to /home/pipci/tif
/test/tif                                    100%    5     0.0KB/s   00:00
----------------------------------------------

上面的复制成功,前提是sftp登录的用户必须对/home/pipci目录有写权限,如果要下载目录需要加上-r参数。

7、本地主机上传文件
sftp> put [-r] [本地主机目录] [远端主机目录或文件]
进行文件的上传的sftp用户必须对远程主机的对应目录有写的权限,如果不指定远程主机目录则文件会存储到sftp登录时的远程主机的当前目录。举例:上传文件
----------------------------------------------
sftp> put  /home/pipci/Yozo_Officelog.txt  /test
Uploading /home/pipci/Yozo_Officelog.txt to /test/Yozo_Officelog.txt
/home/pipci/Yozo_Officelog.txt                100% 2625     2.6KB/s   00:00
----------------------------------------------
上面的复制成功,前提是sftp登录的用户必须对/test目录有写权限,如果要上传目录需要加上-r参数。

八、使用scp进行远程文件复制
scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令。
有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的,但是
前提是复制的用户不能在ssh配置文件中设置chroot限制用户的根目录。如果设置了会提示/bin/sh: No such file or directory这样的错误。

scp命令用法:
上传文件
pipci@ubuntu:~$ scp [-rp] [本地主机文件或目录] [user@ip]:[远程主机目录]
下载文件
pipci@ubuntu:~$ scp [-rp] [user@ip]:[远程主机文件或目录] [本地主机目录]
参数说明:
 -r :递归方式负责目录所有文件
 -p :保留文件原有权限信息
 -P : 制定连接的端口号,这个P为大写的P

举例上传文件:
-------------------------------------------------
pipci@ubuntu:~$ scp  -r  /home/pipci/tidd/  laopi@192.168.1.139:/home/laopi
laopi@192.168.1.139's password:
hs_err_pid15960.log                           100%   91KB  90.7KB/s   00:00    
hs_err_pid15147.log                           100%   97KB  97.5KB/s   00:00
-------------------------------------------------
举例下载文件:
-------------------------------------------------
pipci@ubuntu:~$ scp  -r  laopi@192.168.1.139:/home/laopi/tidd  /home/pipci/
laopi@192.168.1.139's password:
hs_err_pid17040.log                           100%   98KB  97.5KB/s   00:00    
hs_err_pid9006.log                            100%   98KB  97.8KB/s   00:00
-------------------------------------------------

上传或下载重点在那个冒号(:),如果冒号两边都是文件或目录就是上传文件,如果冒号在文件或目录的左侧就是下载文件,冒号两边没有空格

注意两点:

1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:

pipci@ubuntu:~$ scp  -rp  8443 /home/pipci/tidd/  laopi@192.168.1.139:/home/laopi

2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件或目录的权限。

CentOS6.9下sftp配置和scp用法的更多相关文章

  1. Debian9.5下sftp配置和scp用法

    基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.如果只想让某些用户只能使用 sftp 操作文件, 而不能通过ssh进行服 ...

  2. 【转载】CentOS6.5_X64下安装配置MongoDB数据库

    [转载]CentOS6.5_X64下安装配置MongoDB数据库 2014-05-16 10:07:09|  分类: 默认分类|举报|字号 订阅      下载LOFTER客户端 本文转载自zhm&l ...

  3. CentOS6.5下安装配置MySQL

    CentOS6.5下安装配置MySQL,配置方法如下: 安装mysql数据库:# yum install -y mysql-server mysql mysql-deve 查看mysql-server ...

  4. CentOS6.8下实现配置配额

    CentOS6.8下实现配置配额 Linux系统是支持多用户的,即允许多个用户同时使用linux系统,普通用户在/home/目录下均有自己的家目录,在默认状态下,各个用户可以在自己的家目录下任意创建文 ...

  5. CentOS6.5下安装配置MySQL数据库

    一.MySQL简介 说到数据库,我们大多想到的是关系型数据库,比如MySQL.Oracle.SQLServer等等,这些数据库软件在Windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  6. CentOS6.2下安装配置MySql

    转自:Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.ecli ...

  7. centos6.7下安装配置vnc

    vnc是一款使用广泛的服务器管理软件,可以实现图形化管理,下面简单介绍一下如何在centos6.7下安装vnc. 1.安装vncserver yum install tigervnc tigervnc ...

  8. Centos6.7下安装配置VPN

    在Vultr上买了台VPS准备做VPN,不贵5刀,位置是日本东京的.ping值在100-200之间,还好算说的过去. Vultr地址 系统选择的Centos6 的版本是6.7 在网上查了查linux下 ...

  9. CentOS6.3下安装配置SVN(Subversion)

    #检查是否安装了低版本的SVN [root@localhost ~]# rpm -qa subversion subversion--.el6.x86_64 #卸载旧版本SVN [root@local ...

随机推荐

  1. nyoj--586--疯牛(二分&&枚举)

    疯牛 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间 ...

  2. 带你玩转Visual Studio——带你理解多字节编码与Unicode码

    目录(?)[-] 多字节字符与宽字节字符 char与wchar_t string与wstring string 与 wstring的相关转换 字符集Charcater Set与字符编码Encoding ...

  3. Java中异常处理之try和catch代码块的使用

    转自:https://www.jb51.net/article/72901.htm Java try和catch的使用 尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自 ...

  4. luogu 1351 联合权值

    联合权值 题目大意 给你一个图,有\(n-1\)条边,距离均为\(1\),每距离为\(2\)的两个点的联合权值为\(W_u \times W_v\),求联合权值的最大值和联合权值总和. solutio ...

  5. C#之Action和Func的用法(转自 https://www.cnblogs.com/LipeiNet/p/4694225.html)

    以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...

  6. 1112 KGold

    给出N个人在0时刻的财富值M[i](所有人在0时刻的财富互不相等),以及财富增长速度S[i],随着时间的推移,某些人的财富值会超越另外一些人.如果时间足够长,对于财富增长最快的人来说,他的财富将超越所 ...

  7. ajax错误信息

    XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...

  8. 2013-11-02 【webrebuild广州站】分享会纪要

    为了不让自己沉浸个人的技术研究当中,也为了多去接触业界新技术新思想,今天去参加了webrebuild广州站的一个分享交流会,效果不错,有一些获益.听了四个主题,依据个人获取信息的情况来做个纪要(比较粗 ...

  9. HDU 1667 The Rotation Game (A*迭代搜索)

    题目大意:略 每次选择一个最大深度K,跑IDA* 估价函数H=8-中间8个格里出现次数最多的数的个数x,即把它填满这个数最少需要8-x次操作,如果dep+H>K,就跳出.. 深搜的时候暴力修改, ...

  10. C语言运行时数据结构

    段(Segment): 对象文件/可执行文件: SVr4 UNIX上被称为ELF(起初"Extensible Linker Format", 现在"Executable ...