前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SFTP 上传、下载文件

SFTP 上传、下载文件

作者头像
Kevin song
发布2023-12-19 16:12:43
1.2K0
发布2023-12-19 16:12:43
举报

SFTP

SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。SFTP为SSH的一部分, SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作。SFTP传输提供了密码和密钥验证机制,可以有效防止传输过程的威胁和攻击。在 RHEL 9 中安全复制协议(SCP)存在已知的安全漏洞已被弃用,远程拷贝文件推荐使用SFTP安全文件传送协议。Windows 常用的SFTP客户端有XFTP、WinSCP、FileZilla等。

SFTP登录

密码登录

代码语言:javascript
复制
sftp -P 22 root@127.0.0.1

密钥登录

代码语言:javascript
复制
sftp -P 22 -i ~/.ssh/id_rsa root@127.0.0.1

SFTP Shell 基本操作

查看本地上传下载路径:lpwd

切换本地上传和下载的目录:lcd /opt

切换本地工作目录:lcd /opt

查看远程服务器当前目录:pwd

查看远程服务器目录下文件:ls

切换远程服务器工作目录:lcd /opt

SFTP下载文件

下载远程服务器文件到本地

代码语言:javascript
复制
get remote_file_name

下载文件重命名

代码语言:javascript
复制
get remote_file_name local_file_name

下载文件和目录

代码语言:javascript
复制
get -r directory_name

保持原来文件属性和日期

代码语言:javascript
复制
get -Pr directory_name

SFTP上传文件

上传本地文件到远程服务器

代码语言:javascript
复制
put localfile

上传文件和目录

代码语言:javascript
复制
put -r local_directory_name

SFTP命令参数介绍

代码语言:javascript
复制
sftp [hostname]:连接到指定的远程主机
df [-hi] [path]:显示当前目录或包含指定路径的文件系统的统计信息。
ls:列出远程主机上当前目录中的文件和文件夹
lls:列出本地主机上当前目录中的文件和文件夹
pwd:显示当前远程主机上的工作目录
lpwd:显示当前本地主机上的工作目录
cd [directory]:更改远程主机上的工作目录
lcd [directory]:更改本地主机上的工作目录
get [filename]:从远程主机下载指定的文件
put [filename]:上传本地计算机上的文件到远程主机
rm [filename]:删除远程主机上的指定文件
mkdir [directory]:在远程主机上创建一个新的目录
lmkdir [directory]:在本地主机上创建一个新的目录
rmdir [directory]:删除远程主机上的指定目录
rename [oldname] [newname]:将远程主机上的文件或目录重命名
chgrp [-h] grp path:将文件或目录的组(group)更改为指定的组
chmod [-h] mode path:将文件或目录的权限(permissions)更改为指定的权限模式。
chown [-h] own path:将文件或目录的所有者(owner)更改为指定的用户。
exit:退出SFTP会话
help:显示SFTP的帮助文本

限制SFTP用户其向上跨目录访问

SFTP是FTP over SSH的安全FTP协议,对于访问SFTP的用户建议使用专用账号,只能上传或下载文件,不能用于SSH登录,同时对SFTP可以访问的目录进行限定,防止目录遍历攻击。

创建sftp 用户、目录

新建用户组、用户和sftp目录

1.新建目录

代码语言:javascript
复制
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

2.新建用户组

代码语言:javascript
复制
groupadd sftp

3.新建用户

代码语言:javascript
复制
useradd -g sftp -d /data/sftp/sftpuser -M -s /sbin/nologin sftpuser
  • -g指定用户组、-d指定家目录、-s nologin 不能登录系统、-M不创建家目录

设置sftp 用户密码

代码语言:javascript
复制
echo 'xxxxx'|passwd --stdin sftpuser

4.新建sftp可写目录

代码语言:javascript
复制
mkdir -p /data/sftp/sftpuser/upload
chown -R sftpuser:sftp /data/sftp/sftpuser/upload
chmod -R 755 /data/sftp/sftpuser/upload

ssh配置文件

1.注释如下参数

vim /etc/ssh/sshd_config

代码语言:javascript
复制
#Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH

2.文件最后添加参数

vim /etc/ssh/sshd_config

代码语言:javascript
复制
Subsystem sftp internal-sftp -l INFO -f AUTH
Match Group sftp
ChrootDirectory /data/sftp/u%
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

参数介绍

  • Subsystem sftp internal-sftp 表示sftp服务使用系统自带的internal-sftp,-l INFO 表示将日志级别设置为信息级别,-f AUTH 表示系统将记录与身份验证过程相关的日志
  • Match Group sftp 表示配置指定的组,此处也可以写成Match User sftpuser来指定配置的用户
  • ForceCommand internal-sftp 表示强制使用系统internal-sftp
  • ChrootDirectory /data/sftp/%u 指定用户根目录,%u表示当前的用户
  • AllowTcpForwarding no 禁止TCP转发
  • X11Forwarding no 禁止X11转发

3.重启ssh服务

代码语言:javascript
复制
systemctl restart sshd

远程拷贝文件到本地

代码语言:javascript
复制
sftp username@remote_host:/path/to/remote_file local_file
  • username:远程服务器用户名
  • remote_host:远程服务器IP
  • /path/to/remote_file:远程服务器文件路径
  • local_file:要保存到本地的文件路径

拷贝本地文件到远端服务器

代码语言:javascript
复制
sftp username@remote_server:/path/to/remote_directory <<< "put /path/to/local_file"
  • /path/to/remote_directory:远程服务器上保存文件的目录
  • /path/to/local_file:要复制的本地文件的路径和文件名
  • <<<:命令用于将字符串传输给sftp会话。命令字符串包括put用于将文件从本地复制到远程服务器
代码语言:javascript
复制
echo "put /opt/go1.19.linux-amd64.tar.gz" | sftp root@192.168.100.92:/mnt
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档