Linux(Centos 7.6)命令详解:sftp

1.命令作用

安全文件传输程序(secure file transfer program);用于远程登录sftp服务器;sftp是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口和ssh一样为22

2.命令语法

Usage: sftp [OPTION] host
             sftp [OPTION] [user@]host[:file ...]
             sftp [OPTION] [user@]host[:dir[/]]
             sftp -b batchfile [user@]host

3.参数详解

OPTION:

  • -1 | -2,指定使用协议版本1或者版本2,默认是版本2
  • -4 | -6,强制SFTP仅使用IPv4或者IPv6地址,默认是IPv4
  • -a,尝试继续中断的传输操作,而非覆盖现有部分或完整的文件副本;如果部分内容与正在传输的内容不同,那么最终生成的文件很可能会是损坏的
  • -B buffer_size,指定SFTP在传输文件时所使用的缓冲区大小;较大的缓冲区会减少往返次数,但会增加内存消耗;默认值为32768字节
  • -b batchfile,批处理模式会从输入的批处理文件中读取一系列命令,而非从标准输入读取。由于它不支持用户交互,因此应与非交互式身份验证结合使用。用“-”作为批处理文件的开头可以表示标准输入。sftp 在以下命令中出现任何失败情况时会终止:get、put、reget、reput、rename、ln、rm、mkdir、chdir、ls、lchdir、chmod、chown、chgrp、lpwd、df、symlink 和 lmkdir。可以通过在命令前加上“-”字符(例如,-rm /tmp/blah*)按命令逐个方式来抑制因错误而终止的行为
  • -C,支持压缩(通过ssh的-C标志实现)
  • -c cipher,选择用于对数据传输进行加密的密码算法;此选项将直接传递给ssh命令
    • 协议版本1支持值: 3des,blowfish,des(不能指定多个值)
    • 协议版本2支持值: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc(可指定多个值,以逗号分隔)
  • -D sftp_server_path,直接连接至本地的SFTP服务器(而非通过ssh进行连接);此选项在调试客户端和服务器时可能非常有用,如sftp -D /usr/libexec/openssh/sftp-server
  • -F ssh_config,指定一个针对每个用户的替代型ssh配置文件;此选项会直接传递给ssh,默认配置文件~/.ssh/config,文件格式及其里面的参数可参考/etc/ssh/ssh_config
  • -f,要求在文件传输完成后立即将其写入磁盘;在上传文件时,只有当服务器支持“fsync@openssh.com”扩展时,此功能才会启用
  • -i identity_file,选择用于读取公钥认证身份(私钥)的文件;此选项将直接传递给ssh 
  • -l limit,限制所使用的带宽,单位为千比特每秒
  • -o ssh_option,可用于以与ssh_config中所使用的格式传递ssh参数;这对于需要指定但没有单独的sftp命令行标志的选项非常有用。例如,要指定一个备用端口,请使用:sftp -oPort=24。其他参看ssh_config里面的说明
  • -P port,指定要连接到远程主机的端口
  • -p,保留从原始文件传输过来的修改时间、访问时间和权限设置
  • -q,静音模式:会关闭进度条显示,同时也会屏蔽来自SSH的警告信息和诊断信息
  • -R num_requests,请说明在任何时刻有多少个请求可以处于未完成状态;增加这一数值可能会略微提高文件传输速度,但会增加内存使用量;默认值为64个未完成请求;即指定并发数据传输
  • -r,在上传和下载时会递归地复制整个目录;请注意SFTP在树形遍历过程中不会遵循遇到的符号链接
  • -S program,用于加密连接所使用的程序名称;该程序必须能够理解ssh的选项
  • -s subsystem | sftp_server,指定SSH2子系统或远程主机上sftp服务器的路径;路径适用于使用协议版本1进行sftp传输,或者当远程的sshd未配置sftp子系统时使用
  • -v,提高日志级别;此选项也会传递给ssh服务

INTERACTIVE COMMANDS: (进入到sftp客户端后相关的交互操作命令)

  • help,显示帮助文本
  • ?,"帮助"的同义词
  • version,显示sftp协议版本
  • bye,退出sftp客户端
  • quit,退出sftp客户端
  • exit,退出sftp客户端
  • put [-afPpr] local-path [remote-path],上传本地文件或目录到远程机器上
    • -a,与sftp -a一样,尝试恢复中断或部分传输的文件的上传或下载
    • -f,与sftp -f一样,文件传输完成调用fsync函数写入磁盘持久化保存
    • -P -p,与sftp -p一样,文件的完整权限和访问时间也会被一并复制
    • -r,与sftp -r一样,目录将会被递归地复制(注: sftp在递归传输时不会遵循符号链接)
  • reput [-Ppr] [local-path] remote-path,上传本地文件或目录到远程机器上,且添加-a上传
  • get [-afPpr] remote-path [local-path],获取远程机器上的文件目录下载保存到本地机器上
  • reget [-Ppr] remote-path [local-path],下载远程文件或目录到本地,且添加-a下载
  • progress,切换进度指示器的显示状态(不显示上传下载进度)
  • !command,在本地shell中执行命令
  • !,退出到本地shell
  • 远程操作命令(类似linux文件目录的相关操作命令):
    • cd path,更改远程目录至指定路径
    • chgrp grp path,将文件路径组更改为"grp"。路径可能包含glob字符,并且可以匹配多个文件;"grp"必须是一个数字形式的组ID
    • chmod mode path,更改文件路径的权限至指定模式;该路径可能包含glob字符,并且能够匹配多个文件
    • chown own path,将文件路径的拥有者更改为"自身";该路径可能包含glob字符,并且可以匹配多个文件;"own"必须是一个数字形式的用户标识符
    • df [-hi] [path],显示当前目录(或指定的路径)所对应的文件系统的使用信息;若指定了 -h 标志,则会以"人类可读"的后缀形式显示容量信息;-i 标志则要求除了显示容量信息外,还显示索引节点信息;此命令仅在实现"statvfs@openssh.com"扩展的服务器上有效
    • ln [-s] oldpath newpath,创建从"oldpath"到"newpath"的链接;如果指定了-s 标志,则创建的链接为符号链接;否则为硬链接
    • symlink oldpath newpath,创建一个从"oldpath"到"newpath"的符号链接
    • mkdir path,创建由路径指定的远程目录
    • pwd,显示远程工作目录
    • rename oldpath newpath,将远程文件从"oldpath"重命名为"newpath"
    • rm path,删除由路径指定的远程文件
    • rmdir path,删除由路径指定的远程目录
    • ls [-1afhlnrSt] [path],显示指定路径(若未指定则显示当前目录)的远程目录列表;路径中可以包含glob字符,并且可以匹配多个文件
      • -1,生成单列输出
      • -a,列出以点(' . ')开头的文件(显示隐藏文件)
      • -f,不要对列表进行排序;默认的排序顺序是字典顺序
      • -h,当与长格式选项一起使用时,使用单位后缀:Byte、kilbyte、Megabyte、Gigabyte、Terabyte、Petabyte和Exabyte,以便使用2的幂将位数减少到4位或更少(K=1024,M=1048576等)
      • -l,显示其他详细信息,包括权限和所有权信息
      • -n,生成一个长列表,其中包含以数字形式表示的用户和组信息
      • -r,反转列表的排序顺序
      • -S,按文件大小对列表进行排序
      • -t,按最后修改时间对列表进行排序
  • 本地操作命令(类似linux文件目录的相关操作命令):
    • lcd path,将本地目录更改为路径
    • lls [ls-options [path]],如果未指定路径,则会显示指定路径或当前目录的本地目录列表。ls 参数可以包含本地系统中的 ls命令所支持的任何标志;路径可以包含通配符(glob字符),并且可以匹配多个文件
    • lmkdir path,创建由路径指定的本地目录
    • lpwd,打印本地工作目录
    • lumask umask,将本地用户掩码设置为掩码值(即指定本地创建文件和目录的默认权限)

4.常用用例

4.1.远程访问及其参数简单说明

sftp 192.168.118.201                                     # 仅指定IP地址,用户默认为执行命令的用户
sftp user1@192.168.118.201                               # 指定用户及其IP地址进行连接
sftp user1@192.168.118.201:test1.txt                     # 将远程文件test1.txt下载到本地后退出
sftp user1@192.168.118.201:tdir1/                        # 连接到远程sftp的指定目录,默认是远程用户的家目录
sftp -a user1@192.168.118.201                            # 支持数据的断点传输
sftp -B 65536 user1@192.168.118.201                      # 指定数据传输缓冲区大小
sftp -i id_rsa user1@192.168.118.201                     # 指定远程连接用户的私钥(即使没有互信也不需要输入用户密码)
sftp -i id_rsa -b sftp_script.txt user1@192.168.118.201  # 指定脚本进行数据传输
sftp -C user1@192.168.118.201                            # 传输进行数据压缩
sftp -c aes128-ctr,aes192-ctr user1@192.168.118.201      # 指定会话加密算法
sftp -D /usr/libexec/openssh/sftp-server                 # 直接连接至本地的sftp服务器
sftp -F config 192.168.118.201                           # 指定配置文件连接sftp服务
sftp -f user1@192.168.118.201                            # 文件传输完立即写入磁盘(观察不出具体现象)
sftp -l 20480 user1@192.168.118.201                      # 限制/指定带宽大小,单位千比特每秒
sftp -oPort=22 user1@192.168.118.201                     # 指定连接参数,参数man sftp可以看到
sftp -P 22 user1@192.168.118.201                         # 指定连接的端口,与ssh端口一致
sftp -p user1@192.168.118.201                            # 保留原始文件的修改时间、访问时间和权限设置
sftp -q user1@192.168.118.201                            # 安静模式,不输出传输文件的进度等信息
sftp -R 100 user1@192.168.118.201                        # 指定最大并发传输,默认为64
sftp -r user1@192.168.118.201                            # 上传和下载时递归地复制整个目录
sftp -S /usr/bin/custom_ssh user1@192.168.118.201        # 指定自定义的ssh实现,默认为/usr/bin/ssh
sftp -v user1@192.168.118.201                            # 连接时输出更多信息

4.2.上传下载

put test.txt                          # 上传文件
put test.txt tdir/test_bak.txt        # 上传文件到指定目录,且改名为test_bak.txt
get test1.txt                         # 下载文件
get test.txt tdir/test_bak.txt        # 下载文件到指定目录,且改名为test_bak.txt
################################################################################
[root@node2 ~]# sftp user1@192.168.118.201
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt                                 # 连接后,put是上传文件
Uploading test.txt to /home/user1/test.txt
test.txt                                           100% 1058MB  82.1MB/s   00:12    
sftp> get test1.txt                                # 连接后,get是下载文件
Fetching /home/user1/test1.txt to test1.txt
/home/user1/test1.txt                              100%   30MB  68.5MB/s   00:00    
sftp> 

4.3.指定传输带宽

# 指定-l限制带宽后,put上传文件发现只有不到20MB/s,不限制可达80多MB/s
[root@node2 ~]# sftp -l 20480 user1@192.168.118.201
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt
Uploading test.txt to /home/user1/test.txt
test.txt                                       4%   48MB  17.3MB/s   00:58 ETA

4.4.指定配置文件连接

# 指定配置文件连接,与ssh功能一致
[root@node2 ~]# cat config 
Host 192.168.118.201
    HostName node1
    User user1
    Port 22
[root@node2 ~]# sftp -F config 192.168.118.201
user1@node1's password: 
Connected to 192.168.118.201.
sftp> 

4.5.指定脚本批量传输

# 如果没有互相,建议与-i参数一起使用,如果没有互相和-i参数,执行报错,不会提示输入密码
[root@node2 ~]# sftp -i id_rsa -b sftp_script.txt user1@192.168.118.201
sftp> put test.txt
sftp> get test1.txt
sftp> quit
[root@node2 ~]# 
[root@node2 ~]# cat sftp_script.txt 
put test.txt
get test1.txt
quit
[root@node2 ~]# 

4.6.设置缓冲大小(影响性能)

[root@node2 ~]# sftp user1@192.168.118.201             # 默认缓冲32768字节
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt
Uploading test.txt to /home/user1/test.txt
test.txt                                                  100% 1058MB  89.2MB/s   00:11
sftp> exit
[root@node2 ~]# sftp -B 65536 user1@192.168.118.201    # 指定缓冲为65536字节
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt
Uploading test.txt to /home/user1/test.txt
test.txt                                                  100% 1058MB  93.1MB/s   00:11    
sftp> exit
[root@node2 ~]# sftp -B 4096 user1@192.168.118.201     # 指定缓冲为4096字节
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt
Uploading test.txt to /home/user1/test.txt
test.txt                                                  100% 1058MB  76.2MB/s   00:13    
sftp> 

4.7.继续中断传输

[root@node2 ~]# sftp user1@192.168.118.201      # 默认传输,不会断点续传,重复执行会从0%开始传输
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt
Uploading test.txt to /home/user1/test.txt
test.txt                                        100% 1058MB  94.7MB/s   00:11    
sftp> put test.txt
Uploading test.txt to /home/user1/test.txt
test.txt                                        26%  278MB  90.9MB/s   00:08 ETA^Interrupt  
test.txt                                        33%  356MB  91.0MB/s   00:07 ETA
sftp> 
sftp> exit
[root@node2 ~]# 
[root@node2 ~]# sftp -a user1@192.168.118.201   # -a会断点续传,上面从33%断开,下面重新执行就从33%开始(最好保证前后文件没有变化进行断点续传)
user1@192.168.118.201's password: 
Connected to 192.168.118.201.
sftp> put test.txt
Resuming upload of test.txt to /home/user1/test.txt
test.txt                                        100% 1058MB  93.1MB/s   00:07    
sftp> 

4.8.远程目录文件操作

# 远程操作命令与linux命令名称和用法基本一致,详细参考"参数详解"部分
sftp> ls -l                           # 查看远程当前目录下的文件或目录
drwxrwxr-x    2 user1     user1          101 Jul 14 06:54 tdir
-rw-r--r--    1 user1     user1     468090880 Jul 14 02:28 test.txt
-rw-r--r--    1 user1     user1     31272960 Jul 13 23:53 test1.txt
sftp> cd tdir/                        # 远程的目录切换
sftp> pwd                             # 查看远程sftp所处的目录
Remote working directory: /home/user1/tdir
sftp> 

4.9.本地目录文件操作

# 本地操作命令是在linux命令名称前加了字母l(local首字母),用法基本一致,详细参考"参数详解"部分
sftp> lls -l                      # 查看本地当前目录的文件或目录
total 2265636
-rw-------. 1 root root       2874 Dec 16  2024 anaconda-ks.cfg
... ...                           # 当前目录文件目录过多,省略显示
drwxr-xr-x  2 root root          6 Jul 13 23:09 tdir1
... ...
drwxr-xr-x. 2 root root          6 Dec 16  2024 Videos
sftp> lcd tdir1                   # 切换本地的目录
sftp> lpwd                        # 查看本地所处的目录
Local working directory: /root/tdir1
sftp> 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆是浪个

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值