Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > linux网络服务搭建sftp

linux网络服务搭建sftp指南

作者: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

//接下来把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。

目录操作

列出远程目录内容:

切换远程目录:

创建远程目录:

查看当前远程目录位置:

删除远程文件或目录:

总结

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

您可能感兴趣的文章:
阅读全文