linux网络服务搭建sftp指南

 更新时间:2026年06月13日 10:25:23   作者:635  
这篇文章主要介绍了linux网络服务搭建sftp全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

定义

SFTP(SSH File Transfer Protocol)即 SSH 文件传输协议。

它是一种安全的文件传输协议,运行在 SSH(Secure Shell)协议之上,利用 SSH 通道来提供安全的文件传输服务。安全特性

加密传输

SFTP 对传输的数据进行加密,包括文件名、文件内容、目录结构等所有信息。这可以防止数据在网络传输过程中被窃取或篡改。

例如,当在两个网络节点之间传输敏感的商业文件或者用户隐私数据时,加密机制能确保数据安全。

基于 SSH 认证:它依赖 SSH 的认证机制,如使用公钥 - 私钥对或者用户名 / 密码组合进行身份验证。这意味着只有通过认证的用户才能建立 SFTP 连接并进行文件传输。

例如,系统管理员可以通过配置 SSH 公钥认证,为特定用户提供更安全的访问方式来传输文件。

工作原理

SFTP 客户端与服务器建立 SSH 连接后,通过该连接进行文件传输操作。SSH 协议负责提供安全的通信通道,包括对传输的数据进行加密和完整性检查。

在这个通道基础上,SFTP 协议规定了文件传输相关的操作,如文件的上传(put 操作)、下载(get 操作)、目录浏览、文件删除、重命名等操作。

从技术层面讲,当客户端发起一个 SFTP 请求时,SSH 服务器会创建一个子进程来处理这个请求,这个子进程专门负责与客户端进行 SFTP 通信,并且严格遵循 SFTP 协议来处理文件传输事务。

与 FTP 的对比

安全性:

FTP(File Transfer Protocol)是传统的文件传输协议,它以明文形式传输数据,包括用户名、密码和文件内容等。这使得 FTP 在不安全的网络环境中很容易被中间人攻击,导致信息泄露。而 SFTP 通过加密解决了这个安全隐患。

例如,在一个公共无线网络环境中,如果使用 FTP 传输银行账户信息相关的文件,黑客很容易截获这些数据;但如果使用 SFTP,数据会被加密,黑客截获的数据将是无法解读的密文。

连接方式:

FTP 使用两个独立的连接,一个用于传输控制信息(如命令),另一个用于传输数据。这种方式在防火墙环境下可能会遇到问题,因为防火墙可能会阻止其中一个连接。

SFTP 只使用一个 SSH 连接来传输控制信息和数据,更容易通过防火墙,减少了因防火墙设置导致的连接问题。

应用场景

企业内部文件共享和传输:企业内部网络中,不同部门之间需要安全地共享文件,如财务数据、设计文档等。SFTP 提供了一个安全可靠的方式,确保数据在传输过程中的保密性和完整性。

服务器管理和维护:系统管理员可以使用 SFTP 从远程服务器下载日志文件进行故障诊断,或者上传配置文件来更新服务器设置。例如,当管理一个大型的数据中心,管理员可以通过 SFTP 安全地在本地和服务器之间传输系统更新文件。

配置sftp需要的环境

//创建一个sftp的一个认证用户并且设置密码

useradd sftp -s /sbin/nologin

passwd sftp

//修改它的主目录的拥有者和拥有组并赋予权限

chown root:sftp /home/sftp

chmod 755 /home/sftp

//创建一个测试用的目录里面有几个文件

mkdir /home/sftp/upload
#在主目录创建一个目录方便搭建完用于测试,这是我upload下的文件
boot.xfsdump      boot_1.xfsdump    command.txt       config.file       english.txt       note.shell        rsyncd.conf.bak   text.edit  

//修改一下sftp的配置文件

vim /etc/ssh/sshd_conf
#我这里是centos7

在配置之前需要把这个#Subsystem sftp /usr/libexec/openssh/sftp-server给注释掉,在前面加一个"#"即可

#把这些配置加到#Subsystem sftp /usr/libexec/openssh/sftp-server改行下面或者文件末尾都可以

#强制执行内部sftp
Subsystem sftp internal-sftp
#限定只有sftp组的才能访问
Match Group sftp
#是否允许进行 X11 转发
X11Forwarding no
#是否允许TCP转发
AllowTcpForwarding no
#设定属于用户组sftp的用户访问的根目录
ChrootDirectory %h
#强制执行这里指定的命令而忽略客户端提供的任何命令
ForceCommand internal-sftp
  • Match Group sftp 这一行是指定以下的子行配置是匹配 sftp 用户组的。Match user userA,userB 则是匹配用户。
  • ChrootDirectory /data/sftp/%u 设定属于用户组 sftp 的用户访问的根文件夹。%h 代表用户 home 目录,%u 代表用户名。
  • ForceCommand internal-sftp 该行强制执行内部 sftp,并忽略任何 ~/.ssh/rc 文件中的命令。
  • AllowTcpForwarding no 是否允许 TCP 转发,默认值为 "yes", 禁止 TCP 转发并不能增强安全性,除非禁止了用户对 shell 的访问,因为用户可以安装他们自己的转发器。
  • X11Forwarding no 是否允许进行 X11 转发。默认值是 "no",设为 "yes" 表示允许。如果允许 X11 转发并且 sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用 X11 转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止 X11 转发并不能禁止用户转发 X11 通信,因为用户可以安装他们自己的转发器。

//接下来把sshd启动起来即可

systemctl start sshd

连接远程服务器

//远程连接然后输入你刚才为用户设置的密码即可

基本语法:sftp [用户@]服务器地址。例如,要以用户user1的身份连接到服务器192.168.1.100,可以使用命令sftp user1@192.168.1.100。如果服务器允许使用 SSH 密钥认证,并且已经配置好本地密钥,可能不需要输入密码就能直接连接。如果使用密码认证,会提示输入密码。

端口指定:如果远程服务器的 SFTP 服务不是使用默认的 SSH 端口(默认是 22),可以使用-P选项指定端口。例如,服务器使用端口 2222 提供 SFTP 服务,连接命令可以是sftp -P 2222 user2@192.168.1.200。

sftp> ls
upload  
sftp> cd upload
sftp> ls
boot.xfsdump      boot_1.xfsdump    command.txt       config.file       english.txt       note.shell        rsyncd.conf.bak   text.edit         
sftp> get note.shell /root/
Fetching /upload/note.shell to /root/note.shell
note.shell                                                                                                                                            100%  987   274.1KB/s   00:00    
sftp> lls /root
公共  模板  视频  图片  文档  下载  音乐  桌面  my.sql  note.shell  passwd  rsync.passwd
sftp> get config.file /root/
Fetching /upload/config.file to /root/config.file
config.file                                                                                                                                           100%  210    48.8KB/s   00:00    
sftp> lls /root
公共  模板  视频  图片  文档  下载  音乐  桌面  config.file  my.sql  note.shell  passwd  rsync.passwd
sftp> put my.sql /upload/
Uploading my.sql to /upload/my.sql
my.sql                                                                                                                                                100% 1880   909.5KB/s   00:00    
sftp> ls
boot.xfsdump      boot_1.xfsdump    command.txt       config.file       english.txt       my.sql            note.shell        rsyncd.conf.bak   text.edit         
sftp> rm my.sql 
Removing /upload/my.sql
sftp> ls
boot.xfsdump      boot_1.xfsdump    command.txt       config.file       english.txt       note.shell        rsyncd.conf.bak   text.edit         
sftp> 

基本文件传输操作

下载文件:

语法:get [远程文件路径] [本地文件路径]。

例如,要从远程服务器的/home/user3/data.txt下载文件到本地当前目录,可以使用命令get /home/user3/data.txt。

如果想把文件下载到本地的指定目录,如/local/downloads,可以使用get /home/user3/data.txt /local/downloads/data.txt。 

上传文件:

语法:put [本地文件路径] [远程文件路径]。

例如,要将本地的/local/files/script.sh上传到远程服务器的/home/user4/scripts目录下,可以使用命令put /local/files/script.sh /home/user4/scripts/script.sh。

目录操作

列出远程目录内容:

  • 命令:ls。这和在本地使用ls命令类似,用于查看远程服务器当前目录下的文件和目录。
  • 例如,在连接到远程服务器后,输入ls,会显示当前远程目录下的文件名和目录名列表。如果想查看远程指定目录的内容,比如查看/home/user5/documents目录下的内容,可以使用ls /home/user5/documents。 

切换远程目录:

  • 命令:cd。用于在远程服务器的目录之间进行切换。
  • 例如,要从当前远程目录切换到/home/user6/backups目录,可以使用命令cd /home/user6/backups。 

创建远程目录:

  • 命令:mkdir。用于在远程服务器上创建新的目录。
  • 例如,要在远程服务器的/home/user7目录下创建一个名为new_folder的新目录,可以使用命令mkdir /home/user7/new_folder。
  • 其他操作 

查看当前远程目录位置:

  • 命令:pwd。这会显示当前在远程服务器上所处的目录路径。
  • 例如,在连接到远程服务器后,经过一系列的目录切换操作,使用pwd命令可以明确当前所在的目录位置。 

删除远程文件或目录:

  • 命令:rm用于删除远程文件,rmdir用于删除远程目录(前提是目录为空)。
  • 例如,要删除远程服务器/home/user8/temp目录下的文件temp_file.txt,可以使用rm /home/user8/temp/temp_file.txt。要删除远程的空目录/home/user9/empty_folder,可以使用rmdir /home/user9/empty_folder。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux下如何启动Oracle命令

    Linux下如何启动Oracle命令

    这篇文章主要介绍了Linux下如何启动Oracle命令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Linux Shell脚本如何获取当前路径

    Linux Shell脚本如何获取当前路径

    本文介绍了在脚本中获取当前运行目录的方法,通过使用`dirname $0`、`cd $(dirname $0)`和`pwd`命令,可以方便地获取脚本的绝对路径,文中还提供了一个测试示例,验证了该方法的有效性,此外,作者还提到直接使用`pwd`命令也是一种简单有效的获取当前目录的方法
    2025-11-11
  • linux系统下如何挂载NTFS移动硬盘

    linux系统下如何挂载NTFS移动硬盘

    用命令行挂载移动硬盘是Linux的基本操作之一,虽然目前有些Linux系统能自动加载移动硬盘,但有些时候(比如使用Ubuntu Server或其它Linux系统的时候)仍然需要手动操作,下面这篇文章主要介绍了linux系统下如何挂载NTFS移动硬盘,需要的朋友可以参考借鉴。
    2017-01-01
  • 详解linux 定时任务 crontabs 安装及使用方法

    详解linux 定时任务 crontabs 安装及使用方法

    这篇文章主要介绍了linux 定时任务 crontabs 安装及使用方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Centos7 SSH登陆慢的问题及解决

    Centos7 SSH登陆慢的问题及解决

    文章描述了CentOS7登录慢的问题,可能是由于反向验证DNS导致的,解决方案有两个:禁用DNS解析或停止systemd-logind服务,通过修改sshd_config文件或重启sshd进程可以实现禁用DNS解析
    2026-04-04
  • Apache服务器二级域名的完美实现

    Apache服务器二级域名的完美实现

    Apache服务器二级域名的完美实现 首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com
    2008-10-10
  • Centos虚拟机上网配置IP方法

    Centos虚拟机上网配置IP方法

    本篇文章介绍了Centos虚拟机上网的ip配置问题,详细介绍了虚拟机的网络配置问题,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • CentOS 7.2配置Apache服务httpd(上)

    CentOS 7.2配置Apache服务httpd(上)

    这篇文章主要为大家详细介绍了CentOS 7.2配置Apache服务 httpd上篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Git 删除远程服务器文件同时保留本地文件实例详解

    Git 删除远程服务器文件同时保留本地文件实例详解

    这篇文章主要介绍了Git 删除远程服务器文件同时保留本地文件实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • 阿里云 ubuntu16.04搭建IPSec服务

    阿里云 ubuntu16.04搭建IPSec服务

    IPSec是一组基于网络层的,应用密码学的安全通信协议族,这篇文章主要介绍了阿里云 ubuntu16.04搭建IPSec服务,需要的朋友可以参考下
    2019-11-11

最新评论