Linux | SFTP

news2024/11/28 14:05:55
  • SFTP

文章目录

  • SFTP
    • SSH 文件传输协议
    • 连接
    • 获取SFTP帮助
    • 查看及切换路径
      • 遍历远程文件系统
      • 访问本地的文件系统
    • 传输文件
    • 传输本地文件到远程服务器
    • 简单的文件操作
    • 图形界面程序
    • Reference
      • 欢迎关注公众号【三戒纪元】

SSH 文件传输协议

FTP,即文件传输协议,是一种流行的、未加密的在两个远程系统之间传输文件的方法。

在计算机领域,SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secure File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一数据流连线,提供文件存取、传输和管理功能的网络传输协议。

由互联网工程任务组(IETF)设计,透过SSH 2.0 的扩展提供安全文件传输能力,但也能够被其他协议使用。

即使IETF在网络草案资料阶段时,这个协议是在SSH-2文件中描述,它能够使用在许多不同的应用程序,例如安全文件传输在传输层安全(TLS)和传输信息管理于虚拟专用网应用程序。

这个协议是假设执行在安全信道,例如SSH,服务器已经认证客户端,并且客户端用户可利用协议。

与 FTP 协议相比,在几乎所有情况下,SFTP 都比 FTP 更可靠,因为它具有潜在的安全功能并且能够搭载 SSH 连接。 FTP 是一种不安全的协议,只能在有限的情况下或您信任的网络上使用。

连接

默认情况下,SFTP 使用 SSH 协议进行身份验证并建立安全连接。 因此,可以使用 SSH 中存在的相同身份验证方法。

虽然默认情况下可以使用密码进行身份验证,但建议创建 SSH 密钥并将您的公钥传输到您需要访问的任何系统。 这更加安全,从长远来看可以节省您的时间。

首先测试 SSH连接是否有效

ssh randy@your_server_ip_or_remote_hostname

(base) qiancj@qiancj-HP-ZBook-G8:~$ ssh randy@10.88.2.13
sesame@10.XXX.XXX.XXX's password: 
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-97-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

531 updates can be applied immediately.
260 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

New release '20.04.6 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Your Hardware Enablement Stack (HWE) is supported until April 2023.
Last login: Fri Jun  2 16:41:51 2023 from 10.78.3.19

如果上述有效,则退出

exit

(base) sesame@SanJie:~$ exit
logout
Connection to 10.88.2.13 closed.

现在建立SFTP会话:

sftp randy@your_server_ip_or_remote_hostname

(base) qiancj@qiancj-HP-ZBook-G8:~$ sftp sesame@10.88.2.13
sesame@10.88.2.13's password: 
Connected to 10.88.2.13.

此时连接到远程系统,提示也会更改为sftp的提示

如果使用了自定义的SSH 端口号(默认为22),打开SFTP会话时可以设定端口号

sftp -oPort=custom_port randy@your_server_ip_or_remote_hostname

这样会通过指定的端口连接到远程系统

获取SFTP帮助

使用命令:

  sftp> help
  或
  sftp> ?

结果如下:

sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp [-h] grp path                Change group of file 'path' to 'grp'
chmod [-h] mode path               Change permissions of file 'path' to 'mode'
chown [-h] own path                Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                 filesystem containing 'path'
exit                               Quit sftp
get [-afpR] remote [local]         Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-afpR] local [remote]         Upload file
pwd                                Display remote working directory
quit                               Quit sftp
reget [-fpR] remote [local]        Resume download file
rename oldpath newpath             Rename remote file
reput [-fpR] local [remote]        Resume upload file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help

查看及切换路径

遍历远程文件系统

我们可以使用一些功能类似于 shell 命令的命令来浏览远程系统的文件层次结构。

首先,通过找出我们当前在远程系统上的哪个目录来定位自己

sftp>pwd

sftp> pwd
Remote working directory: /home/sesame

查看远程系统当前目录的内容

sftp>ls

sftp> ls                                                                                    
Cognata                                                                                    Desktop                                                                                    
Documents                                                                                  Downloads                                                                                                                                                                        
nohup.out                                                                                  opt                                                                                        
pangweisong                                                                                qiancj                                                                                     
set_iptables.sh                                                                            shared_dir                                                                                                      

请注意,SFTP 界面中可用的命令不是典型 shell 语法的 1:1 匹配,也不是功能丰富的。

但是,它们确实实现了一些更重要的可选标志,例如将 -la 添加到 ls 以查看更多文件元数据和权限:

sftp>ls -la
  Outputdrwxr-xr-x    5 remote_money   remote_money       4096 Aug 13 15:11 .
  drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
  -rw-------    1 remote_money   remote_money          5 Aug 13 15:04 .bash_history
  -rw-r--r--    1 remote_money   remote_money        220 Aug 13 15:02 .bash_logout
  -rw-r--r--    1 remote_money   remote_money       3486 Aug 13 15:02 .bashrc
  drwx------    2 remote_money   remote_money       4096 Aug 13 15:04 .cache
  -rw-r--r--    1 remote_money   remote_money        675 Aug 13 15:02 .profile
  . . .

进入到其他目录

sftp>cd testDirectory

sftp> cd qiancj

访问本地的文件系统

通过在命令前面加上一个 l(local) 来将命令指向本地文件系统。

sftp>lpwd

sftp> lpwd
Local working directory: /home/qiancj
sftp> lcd /home/qiancj/codes/sanjie

列出本地机器上当前目录的内容

sftp> lls

sftp> lls
ai_toolchain						        docker_backup   Music			     opt		 randy_File     tools
anaconda3						        Documents       node_modules		     package.json	 README.en.md   Videos
bin							        Downloads     	  package-lock.json	 README.md   
codes							        Edraw	           pcl_tar		 rviz	        wget-log
commandsQCJ						        eval	        NVIDIA_CUDA-11.4_Samples     Pictures		 shell	         
data							        happyRandy.sh   obsutil_linux_amd64.tar.gz   QCJLogo.sh		 tag
Desktop						        Legend.md       open3d_data		     Q.png		 Template

更改目录:

sftp> lcd Desktop

sftp> lcd ..

传输文件

从远程系统上下载文件到本地

sftp> get remoteFile
  OutputFetching /home/remote_money/remoteFile to remoteFile
  /home/remote_money/remoteFile                       100%   37KB  36.8KB/s   00:01

下载到本地并重命名

sftp> get remoteFile localFile

get 命令可以增加可选项,比如要拷贝目录及其下所有文件,可以使用-r选项

sftp> get -r someDirectory

使用 -P-p 标志维护适当的权限和访问时间

sftp> get -Pr someDirectory

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

使用 put 命令:

sftp> put localFile

结果:

  sftp> put app_meta_randy.tar.gz  ./
  Uploading app_meta_randy.tar.gz to /home/sesame/qiancj/./app_meta_randy.tar.gz     

如果要传输文件夹及其内的文件,使用 put -r:

sftp> put -r localDirectory

sftp> put -r app_meta_randy/ ./
Uploading app_meta_randy/ to /home/sesame/qiancj/./app_meta_randy
Entering app_meta_randy/
Entering app_meta_randy/bin
app_meta_randy/bin/app_meta_randy                                                                                              100%  291KB  30.5MB/s   00:00    
app_meta_randy/start_nginx.sh                                                                                                             100%  221   244.9KB/s   00:00    
app_meta_randy/run.sh                                                                                                                     100% 1119     1.3MB/s   00:00    
Entering app_meta_randy/etc
app_meta_randy/etc/obstacle_segmentation.yaml                                                                                             100% 2563     1.9MB/s   00:00    
app_meta_randy/etc/preprocess.yaml                                                                                                        100%  823   955.9KB/s   00:00    
app_meta_randy/etc/freespace.yaml                                                                                                         100%  495   578.5KB/s   00:00    
app_meta_randy/etc/visual.yaml                                                                                                            100%  246   303.3KB/s   00:00    
app_meta_randy/etc/postprocess.yaml
....

下载和上传文件时有用的一个熟悉的工具是 df 命令,它的工作方式类似于命令行版本。

使用它,可以检查您是否有足够的空间来完成您感兴趣的传输:

sftp> df -h

Copy

  Output    Size     Used    Avail   (root)    %Capacity
    19.9GB   1016MB   17.9GB   18.9GB           4%

请注意,此命令没有本地变体,但我们可以通过发出 ! 命令来解决这个问题。

! 命令将我们带入本地 shell,我们可以在其中运行本地系统上可用的任何命令。 我们可以通过键入以下内容来检查磁盘使用情况:

sftp> !

然后回到了本地系统

df -h
  OutputFilesystem      Size   Used  Avail Capacity  Mounted on
  /dev/disk0s3   520Gi   52Gi  522Gi     9%    /
  devfs          188Ki  288Ki    0Bi   100%    /dev
  map -hosts       0Bi    0Bi    0Bi   100%    /net
  map auto_home    0Bi    0Bi    0Bi   100%    /home

返回到SFTP的会话:

exit

简单的文件操作

SFTP 允许执行某些类型的文件系统内务处理。 例如,可以更改远程系统上文件的所有者:

sftp> chown userID file

请注意,与系统 chmod 命令不同,SFTP 命令不接受用户名,而是使用 UID

而且,没有内置的方法可以从 SFTP 接口中知道适当的 UID

作为解决方法,可以从“/etc/passwd”文件中读取,该文件在大多数 Linux 环境中将用户名与 UID 相关联:

sftp> get /etc/passwd
sftp> !less passwd
  Outputroot:x:0:0:root:/root:/bin/bash
  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  bin:x:2:2:bin:/bin:/bin/sh
  sys:x:3:3:sys:/dev:/bin/sh
  sync:x:4:65534:sync:/bin:/bin/sync
  games:x:5:60:games:/usr/games:/bin/sh
  man:x:6:12:man:/var/cache/man:/bin/sh
  . . .

请注意,这里不是单独给出 ! 命令,而是将其用作本地 shell 命令的前缀。 这适用于运行我们本地机器上可用的任何命令,并且可以更早地与本地 df 命令一起使用。

UID 将位于文件的第三列,由冒号字符划定。

同样,我们可以更改文件的组所有者:

sftp> chgrp groupID file

同样,没有内置的方法来获取远程系统组的列表。 我们可以使用以下命令解决它:

sftp> get /etc/group
sftp> !less group

结果:

  Outputroot:x:0:
  daemon:x:1:
  bin:x:2:
  sys:x:3:
  adm:x:4:
  tty:x:5:
  disk:x:6:
  lp:x:7:
  . . .

第三列包含与第一列中的名称关联的组的 ID。

chmod SFTP 命令在远程文件系统上正常工作:

sftp> chmod 777 publicFile

结果:

  OutputChanging mode on /home/remote_money/publicFile

没有等效的命令来操作本地文件权限,但可以设置本地 umask,以便复制到本地系统的任何文件都将具有其相应的权限。

这可以通过 lumask 命令来完成:

sftp> lumask 022

结果

  OutputLocal umask: 022

现在所有下载的常规文件(只要不使用 -p 标志)都将具有 644 权限。

SFTP 还允许分别使用 lmkdirmkdir 在本地和远程系统上创建目录。

其余文件命令仅针对远程文件系统:

sftp> ln
sftp> rm
sftp> rmdir

这些命令复制了它们的 shell 等价物的核心行为。 如果您需要在本地文件系统上执行这些操作,请记住可以通过发出以下命令进入 shell:

sftp> !

或者通过在命令前加上 ! 在本地系统上执行单个命令:

sftp> !chmod 644 somefile

完成 SFTP 会话后,使用“exit”或“bye”关闭连接。

sftp> bye

图形界面程序

当然可以使用 FileZilla ,XFTP等图形界面程序,设置好站点,以图形文件夹形式展示本地文件和服务器端文件,可直接左右拖拽文件到目标文件夹,方便电脑直接文件传输

FileZilla 界面:

设置站点

Reference

  • SSH文件传输协议
  • Linux 命令详解:SFTP
  • How To Use SFTP to Securely Transfer Files with a Remote Server

欢迎关注公众号【三戒纪元】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的几种关键字详细介绍(秋招总结篇)

前言: 本篇文章主要讲解Java中的几种关键字相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 文…

prometheus介绍与安装

prometheus介绍与安装 文章目录 prometheus介绍与安装一、Prometheus 简介1.Prometheus 优势2.Prometheus 基础架构 二、Prometheus 安装1.后端存储配置 三、使用 Prometheus 实现系统监控四、使用 Prometheus Grafana 实现可视化界面四.zabbixgrafana 安装部署参考http://t.c…

【Mininet】基础篇:开源控制器POX

大家好,我是文思月! 每文一言:时间不在于你拥有多少,而在于你如何使用! 本篇文章: 本篇文章主要是基于POX控制器进行的两个实验:一个是使交换机模拟hub(集线器)的功能&a…

逍遥自在学C语言 | 宏定义技巧让你的C代码快人一步

前言 在C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。 宏定义使用#define关键字来定义,并在代码中进行替换。宏定义具有以下优点: 简化代码:宏定义可以将一些常用的、重复出…

MySQL高可用集群解决方案之:lvs+keepalived+mysql cluster实现负载均衡

一:前言 Mysql-cluster本身实现了高可用,但是其sql节点并没有实现负载均衡。怎样让程序能均衡地访问sql节点呢,程序里写哪个数据库服务器IP呢? LVS是实现负载均衡作用的,即将客户端的需求采用特定的负载均衡算法分发…

在职考研 | 对于朝九晚五的上班族来说同等学力申硕更轻松!

我们要知道的是,考在职研究生的群体90%以上都是朝九晚五的上班族。 他们工作忙,时间和精力都很有限。 考研本身难度就很大,但是既拿不出足够多的备考时间,也没法到线下去上课。 怎么能考上呢? 在这样的现实条件下&…

yolov5部署到android studio

目录 环境获取demo将pt文件导出为ptl文件修改demo修改PrePostProcessor增加ptl文件并增加类别文件修改MainActivity 大功告成 环境 Ubuntu22.10 Pytorch2.0.1cu117 Android Studio Flamingo | 2022.2.1 Patch 1 获取demo git clone https://github.com/pytorch/android-demo…

self Attention 位置编码的奇偶输入问题

attention机制一直是放在encoder-decoder中进行使用,self-attention是为了解决前者结构无法并行计算,而抽离出的概念(前者的编码解码多为时序网络)。 但因为缺少时序模型天然的位置编码特点,所以self-attention模型需要…

Docker镜像大小优化

如何缩小镜像的体积大小? 1)尽可能的使用小体积的基础镜像 2)尽可能减少Dockerfile文件中的指令数量 3)构建镜像步骤最后添加清空系统和应用程序的缓存的命令 4)使用多级(多阶段)构建 FROM A…

亚信科技AntDB数据库荣获赛宝优选信创优秀解决方案奖

近日,由工业和信息化部电子第五研究所主办的中国赛宝信创生态合作伙伴大会暨赛宝优选信创优秀解决方案颁奖仪式在北京成功举办,亚信科技AntDB数据库信创解决方案“业务支撑系统核心数据库迁移改造”从千余案例中脱颖而出,荣获赛宝优选信创优秀…

文件描述符表

文章目录 1. 文件描述符1.1 前言1.2 理解文件1.3 文件描述附表1.4 打开文件时1.5 默认打开的三个文件 2. 重定向2.1 瞅瞅2.2 dup22.3 实现原理 3. 一切皆文件 1. 文件描述符 1.1 前言 环境:Linux 2.6 在 Linux 中,有句话叫做「一切皆文件」&#xff0…

Coinbase:如有必要,不惜在最高法院与SEC“一决胜负”!

6日早间,央视财经频道(CCTV-2)对“币安及其首席执行官被美证交会(SEC)起诉”进行了报道。 值得一提的是,央视并不常播报加密货币相关新闻,上一次是关于香港监管框架,赵长鹏&#xff…

< 每日算法:一文带你认识 “ 双指针算法 ” >

每日算法:初识双指针算法 👉 1. 双指针概念:👉 2. 左右指针> 案例一:二分查找> 案例二:双指针 - 移除元素 👉 3. 快慢指针> 案例一: 删除排序数组中的重复项 👉…

MySQL8安装详细教程

MySQL8安装详细教程 一、下载二、安装三、配置环境 一、下载 官网下载:点击跳转 进入官网后,如下界面 点击Archives可以选择版本进行下载,如下图根据描述操作即可。 百度云下载链接:点击跳转 或者复制到浏览器打开:链…

【1 微信小程序学习-核心思想与体验】

1 小程序的核心技术 .js文件,负责数据处理,函数定义和实现 .wxml文件,组件结构与数据绑定 .wxss文件,组件样式 .json配置信息补充 MVVM架构实现声明式编程 采用MVVM架构,核心是通过数据绑定实现响应式编程(声明式编程). M:数据处理 V:样式结构 VM:数据绑定和事件监听 vue和小程…

程序员的职场危机,能靠技术化解吗?

很多人认为,程序员一定要干到管理层,才会有继续走下去的希望,而踏实做技术的程序员,只会面临淘汰。 事实真是如此吗? △ 截图来源脉脉,如侵删 我们先不说结论,一起看看网友们的看法&#xff1…

Linux | Job control

Linux | Job control 文章目录 Linux | Job control命令直接将命令丢到后台中“执行”的 &将当前工作丢到后台“暂停”:Ctrl z查看后台工作状态:jobs将后台工作拿到前台处理:fg让工作在后台下的状态变成运行中:bg管理后台工作…

Qt6之vc调用qt生成的带ui的dll

受益于跨平台的特性,Qt生成dll的各种语言调用上体现的淋漓尽致,上篇已经演示了qt生成的无ui的dll及vc如何调用它,本篇将演示vc如何调用qt生成的带ui的dll。 传统观点认为Qt生成的带ui的dll受限于 QApplication 的 exec 方法,这样才…

《精通特征工程》学习笔记(6):非线性特征化与k-均值模型堆叠

1.非线性特征 当数据位于一个薄饼状的线性子空间时,PCA 是非常有用的。但如果数据形成了一个更加复杂的形状,情况又将如何呢? 如果线性子空间是一张平展的纸,那么非线性流形的一个简单例子就是卷起来的纸,它有 个非…

《人人健康》期刊简介及投稿邮箱

《人人健康》期刊简介及投稿邮箱 《人人健康》期刊简介: 主管单位:山西出版传媒集团有限责任公司 主办单位:山西三晋报刊传媒集团有限责任公司 国际刊号ISSN:1004-597X 国内刊号CN:14-1033/R 邮发代号&#xff1…