sftp

安全的文件传输程序


语法格式

sftp [-1Cv] [-B bufsize] [-b batch-file] [-F ssh-conf] [-o ssh-opts]
[-P sftp-srv] [-R requests] [-S program] [-s subsys|sftp-srv] host
sftp [user@]host[:files]
sftp [user@]host[:dir[/]]
sftp -b batch-file [user@]host

命令简介

sftp是一个类似于ftp的交互式文件传输程序,文件的传输是基于OpenSSH的加密传输机制实现的。同时,sftp也利用了OpenSSH的许多特性,如公钥认证与数据压缩等。利用sftp命令,可以连接、注册到指定FTP服务器,进入交互式的命令模式,或采用批处理的方式访问FTP服务器。其中,host是FTP服务器的主机名或IP地址。

如果FTP服务器支持非交互式认证方法(可利用ssh-keygen命令配置OpenSSH服务器实现),可采用第二种语法格式,自动连接FTP服务器,在获取指定的文件后立即返回。否则,在单独输入密码,成功地完成交互认证之后,仍可在自动获取指定的文件之后返回。其中,user是FTP服务器认可的用户名,host是FTP服务器的主机名或IP地址,files是欲下载的一个或一组文件。

同样,如果FTP服务器支持非交互式认证方法,可以利用第三种语法格式,自动连接FTP服务器,从指定的远程目录开始交互操作。否则,在单独输入密码,成功地完成交互认证之后,仍可从指定的远程目录开始交互操作。其中,user是FTP服务器认可的用户名,host是FTP服务器的主机名或IP地址,dir是FTP服务器中的一个目录。

在最后一种语法格式中,可以利用sftp的“-b”选项,以批处理的自动会话方式下载或上传文件。在采用这种运行方式之前,必须配置非交互式认证方式,以免在连接FTP服务器时要求输入密码。

命令选项

-1  表示使用OpenSSH协议版本1。

-B bufsize  指定sftp传输文件时采用的缓冲区大小。缓冲区越大,往返应答的次数越少,但耗费的内存较大。默认的缓冲区是32 768个字节。

-b batch-file  采用批处理方式,从指定的输入文件而非标准输入中读取sftp命令,执行文件的传输。由于缺乏用户干预,用户的认证过程也需要采用非交互方式。在批处理过程中,如果其中的任何一个命令失败,如get、put、rename、ln、rm、mkdir、chdir、ls、lchdir、chmod、chown、chgrp、lpwd、df或lmkdir,sftp将会终止执行。若想避免因某个命令失败而影响整个文件传输过程,可在命令之前增加一个减号“-”字符,如“-rm /tmp/batch*”。

-C  启用压缩方式(把“-C”选项传递给ssh,通过ssh实现)。

-F ssh-conf  指定基于用户的ssh配置文件,直接传递给ssh。

-o ssh-opts  采用ssh_config配置文件的格式(如“-o Port=24”),向ssh传递指定的选项。当sftp命令没有单独的选项能够指定ssh选项时,“-o”选项是非常有用的。完整的ssh选项详见ssh_config配置文件手册页的说明。

-P sftp-srv  直接(而非通过ssh)连接到本地sftp服务器。这个选项主要用于调试客户机与服务器。

-R requests  指定在任何给定的时刻,最多可以同时处理多少文件传输请求。增大这个数值能够轻微改善文件传输的速度,但会增加内存的需求。默认的并发请求处理数量是64。

-S program  指定用于处理加密连接的程序。这个程序也必须能够处理ssh选项。

-s subsys | sftp-srv  指定远程系统中的OpenSSHv2子系统或sftp服务器的路径名。当sftp的运行环境是OpenSSHv1,或远程系统的sshd没有配置sftp子系统时,需要指定sftp服务器的路径名。

-v  显示sftp命令(包括ssh命令)的处理过程与调试信息,有助于诊断连接、认证与配置等问题。这个选项也传递给ssh。

交互命令

一旦进入交互命令模式,sftp能够解释与执行下列一组类似于ftp的交互命令。在输入sftp交互命令时请注意:交互命令的名字不区分大小写字母。如果文件的路径名中含有空格字符,前后必须增加引号。如果文件路径名中含有Shell特殊字符,必须在其前面插入一个反斜线“\”转义符号。

bye  退出sftp程序。

cd dir  把远程主机的当前工作目录改换为指定的目录。

chgrp grp file  把指定文件file的用户组改为grp。其中,file可以包含通配符,因而能够匹配多个文件(或目录),grp必须是数字形式的用户组ID。

chmod mode file  修改指定文件的访问权限。其中,file可以包含通配符,因而能够匹配多个文件(或目录)。

chown own file  修改指定文件的属主。其中,file可以包含通配符,因而能够匹配多个文件(或目录),own必须是数字形式的用户ID。

df [-hi] [dir]  显示含有当前目录或指定目录的文件系统的使用情况。如果指定了“-h”选项,将采用适当的单位后缀显示容量信息。“-i”选项表示除了容量信息,还显示信息节点的统计数据。注意,并非所有的系统都支持此命令。

exit  退出sftp程序。

get [-P] rfile [lfile]  把远程文件rfile下载到本地系统,以指定的文件名lfile存储在本地系统中。如果未指定本地文件名,则以远程文件名命名之。rfile可以包含通配符,因而能够匹配多个文件。在此情况下,如果指定了lfile参数,则必须是一个目录。如果同时指定了“-P”选项,文件的访问权限和最近访问时间等属性信息将保持一致。

help  显示交互命令的帮助信息。

lcd path  把本地系统中的工作目录改换到指定的目录。

lls [ls-opts [dir]]  列出本地系统指定目录或当前目录中的文件。其中,ls-opts可以是本地系统ls命令支持的任何选项,dir可以包含通配符,因而能够匹配多个目录。

lmkdir dir  在本地系统中创建指定的目录。

ln file linkfile  创建一个引用file的符号链接文件linkfile

lpwd  显示本地工作目录。

ls [-1aflnrSt] [dir]  列出远程系统指定目录或当前目录中的文件。dir可以包含通配符,因而能够匹配多个目录。此外,ls命令还支持下列选项,以限定命令的输出结果:

-1  生成单列输出。

-a  显示以句点“.”为文件名首字符的隐藏文件。

-f  禁止输出数据排序。默认的排序方法是文件名的字符顺序。

-l  相当于Linux的“ls -l”命令,显示文件的访问权限等信息。

-n  类似于“-l”选项,区别是显示数字形式的用户和用户组信息。

-r  逆向排序。

-S  按文件的大小排序。

-t  按文件的最近修改时间排序。

lumask umask  设置本地系统的创建文件掩码(umask)。

mkdir dir  在远程主机中创建指定的目录。

progress  开关传输进度的显示。

put [-P] lfile [rfile]  把本地文件lfile上传到远程系统,以指定的文件名rfile存储在远程系统中。如果未指定远程文件名,则以本地文件名命名之。lfile可以包含通配符,因而能够匹配多个文件。在此情况下,如果指定了rfile参数,则必须是一个目录。如果同时指定了“-P”选项,文件的访问权限和最近访问时间等属性信息将保持一致。

pwd  显示远程工作目录。

quit  退出sftp程序。

rename file newfile  把远程系统中的文件file重新命名为newfile

rm path  删除指定的远程文件。

rmdir path  删除指定的远程目录。

symlink file linkfile  创建一个引用file的符号链接文件linkfile

version  显示sftp的协议版本。

![cmd]  在本地Shell环境中执行指定的命令。如果未指定命令,直接进入本地Shell。

?  相当于help,显示交互命令的帮助信息。

应用实例

1. 使用sftp命令访问vsFTP服务器、查询文件,然后下载一个指定的文件。

$ sftp iscas
Connecting to iscas...
gqxing@iscas's password: 
sftp> ls -l
drwx------    6 gqxing   gqxing       4096 Dec 17 22:39 conf
drwxrwxr-x    2 gqxing   gqxing       4096 Dec 16 17:44 docs
drwx------    3 gqxing   gqxing       4096 Dec 17 22:44 script
-rw-r--r--    1 gqxing   gqxing      40491 Dec 19 15:59 vsftpd.conf5

sftp> get filelist
Fetching /home/gqxing/vsftpd.conf5 to vsftpd.conf5
/home/gqxing/vsftpd.conf5                     100%   40KB  39.5KB/s   00:00 
sftp> exit
$

2. 自动连接FTP服务器,获取指定的文件后返回。

$ sftp gqxing@iscas:/etc/profile
Connecting to iscas...
Fetching /etc/profile to profile
/etc/profile                                  100% 1459     1.4KB/s   00:00
$

3. 自动连接FTP服务器,从指定的远程目录开始交互操作。

$ sftp gqxing@iscas:/etc/ssh
Connecting to iscas...
Changing to: /etc/ssh
sftp> pwd
Remote working directory: /etc/ssh
sftp>

4. 下面的例子说明如何采用批处理方式下载一个文件。

$ cat getfile
cd /usr/share/doc/openssh-5.3p1
lcd /home/gqxing/doc
get README
bye
$ sftp -b getfile gqxing@iscas
sftp> cd /usr/share/doc/openssh-5.3p1
sftp> lcd /home/gqxing/doc
sftp> get README
Fetching /usr/share/doc/openssh-5.3p1/README to README
sftp> bye
$ ls -l
total 8
-rw-r--r--. 1 gqxing gqxing 2719 Mar 24 08:21 README
-rw-rw-r--. 1 gqxing gqxing    68 Mar 24 08:20 getfile
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z