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>
7万+

被折叠的 条评论
为什么被折叠?



