Debian9.5下sftp配置和scp用法
基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录)。
1、如果只想让某些用户只能使用 sftp 操作文件, 而不能通过ssh进行服务器的管理,就需要先创建只能进行 sftp操作的帐号户(账户名随便起),如果sftp和ssh功能都需要,那么本地用户就可以,不需要新建。
2、限定用户的活动目录,使用户只能在指定的目录下活动,通过/etc/ssh/sshd_config配置文件的 ChrootDirectory 选项进行设置,需要进行ssh管理的帐号不要添加这个选项,添加完了以后ssh会不能登录,后面会说明。
一、新建用户和用户组
我们先添加用户名为test的用户和组名为test的组,只能进行 sftp操作的帐号户
#添加用户组 gtest
root@debian:~# groupadd gtest
#添加用户test 指定家目录 指定用户组
root@debian:~# useradd -d /home/test -m -g gtest test
如果只允许用户进行sftp操作,可以在命令后面加上-s /bin/false参数
#设置用户密码
root@debian:~# passwd test
二、设定你想要限定的活动目录
root@debian:~# mkdir /home/sftp
#配置权限 注意此目录如果用于后续的 chroot 的活动目录,目录开始一直往上到系统根目录为止的目录拥有者都只能是root!!!
root@debian:~# chown root /home/sftp/ #其实这个是不必要的因为我是用root创建的用户
三、用户既可以sftp传输文件又能 ssh 登录到服务器的配置方法
开启ssh服务的sftp子系统,添加下面选项中的一个到配置文件/etc/ssh/sshd_config不可以同时添加
root@debian:~#vi /etc/ssh/sshd_config
Subsystem sftp /usr/lib/openssh/sftp-server #此选项默认已经存在
Subsystem sftp internal-sftp #此选项默认不存在
Subsystem选项的作用
配置外部子系统(例如文件传输守护程序)。参数应该是子系统名称(sftp)和在子系统请求时执行的命令(带有可选参数)。
如果命令为/usr/lib/openssh/sftp-server则sftp以独立进程的方式运行sftp服务。会在服务器上为sftp开启一个独立的进程,默认的选项,当客户端通过sftp命令登录服务器的时候,在服务器上可以查看到相应的进行:
-----------------------------------------
root@debian:~# 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/lib/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 登录服务器
五、配置完成 重启 sshd 服务
root@debian:~# systemctl restart sshd.service
六、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要注意所使用的用户是否具有可读取远程服务器相应文件或目录的权限。
Debian9.5下sftp配置和scp用法的更多相关文章
- CentOS6.9下sftp配置和scp用法
基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.如果只想让某些用户只能使用 sftp 操作文件, 而不能通过ssh进行服 ...
- win10下vscode配置sftp
sftp配置 1.在vscode中下载sftp插件 在vscode中快捷键 ctrl+shift+P 打开指令窗口,输入extension:install,回车,左侧即打开扩展安装的界面 在搜索框中 ...
- linux下ssh/sftp配置和权限设置
基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.开通 sftp 帐号,使用户只能 sftp 操作文件, 而不能 ssh ...
- 末学者笔记--SSHD服务及SCP用法
sshd服务讲解 1.SSHD服务 介绍:SSH 协议:安全外壳协议.为 Secure Shell 的缩写.SSH 为建立在应用层和传输层基础上的安全协议. 默认端口22 作用: sshd服务使用SS ...
- Centos下SFTP双机高可用环境部署记录
SFTP(SSH File Transfer Protocol),安全文件传送协议.有时也被称作 Secure File Transfer Protocol 或 SFTP.它和SCP的区别是它允许用户 ...
- Linux下远程cp命令scp
2014-2.19 PS1.在用此命令cpLinux与Linux之间的数据时发现有些服务器上默认没有安装scp但用yum -y install scp提示么有这样的包 后来发现原来scp工具的安装包 ...
- (转载)Linux下安装配置MySQL+Apache+PHP+WordPress的详细笔记
Linux下安装配置MySQL+Apache+PHP+WordPress的详细笔记 Linux下配LMAP环境,花了我好几天的时间.之前没有配置过,网上的安装资料比较混乱,加上我用的版本问题,安装过程 ...
- SVN 在 linux 下的配置
0.服务器主机需要打开websharing: sudo su (进入root,需要输入密码) apachectl start (没有反应即打开成功) 1.建立想要保存软件仓库的目录 最好在/users ...
- sftp配置多用户权限
sftp配置多用户权限 工作需要,用户上传文件到目录下,用ftp不太安全,选择sftp.让用户在自己的home目录下活动,不能ssh到机器进行操作. 下面开始干活. 查看ssh版本 ssh - ...
随机推荐
- iOS CoreData 介绍和使用(以及一些注意事项)
iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...
- 143.vector模板库
myvector.h #pragma once #include <initializer_list> #include <iostream> using namespace ...
- jqGrid收藏的链接
http://zld406504302.iteye.com/blog/1694017 http://blog.csdn.net/jiudihanbing/article/details/2455902 ...
- inline元素和inline-block元素的4px空白间距解决方案
实在不想写了,要吐了,看到一篇讲的比较全的文章,直接粘链接了 inline元素和inline-block元素的4px空白间距解决方案 出自脚本之家
- Android tablayout增加选择tab 的事件.
tablayout在点击或者滑动的时候会触发监听事件 , 当你调用这个方法的时候 会触发事件 mTablayout.addOnTabSelectedListener(new TabLayout.On ...
- 阿里巴巴战略投资印度最大支付平台Paytm
腾讯科技讯 9月29日,据路透社报道,阿里巴巴和印度最大移动支付和商务平台Paytm今天发布联合声明,宣布阿里巴巴集团及其旗下金融子公司蚂蚁金服将向Paytm注入新资金.阿里称这是一项“战略性的”投资 ...
- js字符串日期yyyy-MM-dd转化为date示例代码
最近遇到一个问题,就是获取表单中的日期往后台通过json方式传的时候,遇到Date.parse(str)函数在ff下报错: NAN 找了些资料,发现是由于Date.parse()函数对日期格式有要求: ...
- POJ 2386 Lake Counting【BFS】
题意:给出一个矩形,问有多少块连通的W 当找到W的时候,进行广搜,然后将搜过的W变成点,直到不能再搜,进行下一次广搜,最后搜的次数即为水塘的个数 看的PPT里面讲的是种子填充法. 种子填充算法: 从多 ...
- vue反向代理解决跨域
问题描述 在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包的时候,我们在本地启动服务器后,比如本地开发服务下是 http ...
- c标签迭代Map
<%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" ...