Linux sftp命令介绍
sftp(Secure File Transfer Protocol)是SSH协议的一部分,用于在加密的SSH传输上访问、管理和传输文件。与传统的FTP协议相比,sftp提供了FTP的所有功能,但它更安全,更容易配置。不像SCP,它只支持文件传输,sftp允许你在远程文件上执行一系列操作,并且可以恢复文件传输。
Linux sftp命令适用的Linux版本
sftp命令在大多数Linux发行版中都是可用的,它是openssh-client软件包的一部分。如果你的Linux系统没有安装openssh-client,你可以使用以下命令来安装它:
- 在基于Debian的系统(如Ubuntu)上,使用apt命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt update
[linux@bashcommandnotfound.cn ~]$ sudo apt install openssh-client
- 在基于Red Hat的系统(如CentOS)上,使用yum或dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum install openssh-clients
或者
[linux@bashcommandnotfound.cn ~]$ sudo dnf install openssh-clients
Linux sftp命令的基本语法
sftp命令的基本语法如下:
sftp [options] [user@]host[:file ...]
sftp [options] [[user@]host[:dir[/]]]
sftp [options] -b batchfile [user@]host
其中:
- options是一些可选的参数,用于指定sftp的行为,如端口号、密钥文件、密码等。
- user是远程服务器的用户名,如果省略,则默认为本地用户名。
- host是远程服务器的主机名或IP地址。
- file是要传输的远程文件或目录的路径,可以指定多个文件或目录,用空格分隔。
- dir是要传输的远程目录的路径,必须以斜杠结尾。
- batchfile是一个包含sftp命令的文本文件,用于批量执行sftp操作。
Linux sftp命令的常用选项或参数说明
sftp命令支持很多选项或参数,用于控制sftp的行为和输出。下表列出了一些常用的选项或参数,以及它们的含义和用法。
选项或参数 | 含义和用法 |
---|---|
-P port | 指定远程服务器的SSH端口号,如果不指定,默认为22。 |
-i identity_file | 指定用于身份验证的私钥文件,如果不指定,默认为~/.ssh/id_rsa。 |
-b batchfile | 指定一个包含sftp命令的文本文件,用于批量执行sftp操作。 |
-C | 启用压缩传输,可以提高传输速度,但会增加CPU负载。 |
-v | 启用详细模式,显示sftp的调试信息。 |
-q | 启用安静模式,不显示任何信息。 |
-h | 显示sftp的帮助信息,并退出。 |
Linux sftp命令的实例
下面是一些使用sftp命令的实例,展示了sftp的常见用法和操作。
实例1:连接到远程服务器
要连接到远程服务器,使用sftp命令,后面跟上远程服务器的用户名和主机名或IP地址,例如:
[linux@bashcommandnotfound.cn ~]$ sftp linuxize@192.168.121.199
如果你使用的是密码认证,你会被提示输入远程用户的密码。如果你使用的是密钥认证,你可能会被提示输入密钥的密码,或者直接连接成功。连接成功后,你会看到一个sftp提示符,表示你已经进入了sftp交互模式,可以执行sftp命令了,例如:
Connected to 192.168.121.199.
sftp>
实例2:传输文件和目录
要从远程服务器下载文件或目录,使用get命令,后面跟上远程文件或目录的路径,以及可选的本地路径,例如:
sftp> get /home/linuxize/file.txt /tmp/file.txt
这个命令会将远程服务器上的/home/linuxize/file.txt文件下载到本地系统的/tmp/file.txt文件。如果省略本地路径,文件会被下载到当前本地目录。
要上传文件或目录到远程服务器,使用put命令,后面跟上本地文件或目录的路径,以及可选的远程路径,例如:
sftp> put /tmp/file.txt /home/linuxize/file.txt
这个命令会将本地系统上的/tmp/file.txt文件上传到远程服务器的/home/linuxize/file.txt文件。如果省略远程路径,文件会被上传到当前远程目录。
实例3:列出文件和目录
要列出远程服务器上的文件和目录,使用ls命令,后面可以跟上一些选项和路径,例如:
sftp> ls -l /home/linuxize
这个命令会以长格式列出远程服务器上的/home/linuxize目录的内容。如果省略路径,会列出当前远程目录的内容。
要列出本地系统上的文件和目录,使用lls命令,后面可以跟上一些选项和路径,例如:
sftp> lls -l /tmp
这个命令会以长格式列出本地系统上的/tmp目录的内容。如果省略路径,会列出当前本地目录的内容。
实例4:切换目录
要切换远程服务器上的目录,使用cd命令,后面跟上要切换的目录的路径,例如:
sftp> cd /var/log
这个命令会将当前远程目录切换到/var/log目录。
要切换本地系统上的目录,使用lcd命令,后面跟上要切换的目录的路径,例如:
sftp> lcd /tmp
这个命令会将当前本地目录切换到/tmp目录。
实例5:创建和删除目录
要在远程服务器上创建一个目录,使用mkdir命令,后面跟上要创建的目录的路径,例如:
sftp> mkdir /home/linuxize/test
这个命令会在远程服务器上的/home/linuxize目录下创建一个名为test的目录。
要在本地系统上创建一个目录,使用lmkdir命令,后面跟上要创建的目录的路径,例如:
sftp> lmkdir /tmp/test
这个命令会在本地系统上的/tmp目录下创建一个名为test的目录。
要在远程服务器上删除一个目录,使用rmdir命令,后面跟上要删除的目录的路径,例如:
sftp> rmdir /home/linuxize/test
这个命令会在远程服务器上删除/home/linuxize/test目录,注意,目录必须是空的,否则会失败。
实例6:重命名和删除文件
要在远程服务器上重命名一个文件,使用rename命令,后面跟上原文件名和新文件名,例如:
sftp> rename /home/linuxize/file.txt /home/linuxize/new_file.txt
这个命令会将远程服务器上的/home/linuxize/file.txt文件重命名为/home/linuxize/new_file.txt文件。
要在本地系统上重命名一个文件,使用lrename命令,后面跟上原文件名和新文件名,例如:
sftp> lrename /tmp/file.txt /tmp/new_file.txt
这个命令会将本地系统上的/tmp/file.txt文件重命名为/tmp/new_file.txt文件。
要在远程服务器上删除一个文件,使用rm命令,后面跟上要删除的文件的路径,例如:
sftp> rm /home/linuxize/file.txt
这个命令会在远程服务器上删除/home/linuxize/file.txt文件。
要在本地系统上删除一个文件,使用lrm命令,后面跟上要删除的文件的路径,例如:
sftp> lrm /tmp/file.txt
这个命令会在本地系统上删除/tmp/file.txt文件。
实例7:批量执行sftp命令
要批量执行sftp命令,你可以创建一个包含sftp命令的文本文件,然后使用-b选项来指定该文件,例如:
[linux@bashcommandnotfound.cn ~]$ sftp -b batchfile.txt linuxize@192.168.121.199
这个命令会读取batchfile.txt文件中的sftp命令,并依次执行它们。batchfile.txt文件的内容可以是类似于以下的格式:
cd /home/linuxize
get file.txt
put new_file.txt
rm file.txt
rename new_file.txt file.txt
这个文件中的命令会依次切换到/home/linuxize目录,下载file.txt文件,上传new_file.txt文件,删除file.txt文件,重命名new_file.txt文件为file.txt文件。
实例8:使用端口号和密钥文件
如果远程服务器的SSH服务不是使用默认的22端口,或者你想使用指定的密钥文件来进行身份验证,你可以使用-P和-i选项来指定端口号和密钥文件,例如:
[linux@bashcommandnotfound.cn ~]$ sftp -P 2222 -i ~/.ssh/id_rsa_custom linux@192.168.1.2
这个命令会使用2222端口和~/.ssh/id_rsa_custom密钥文件来连接到远程服务器。
实例9:使用压缩传输和详细模式
如果你想提高传输速度,或者查看sftp的调试信息,你可以使用-C和-v选项来启用压缩传输和详细模式,例如:
[linux@bashcommandnotfound.cn ~]$ sftp -C -v linux@192.168.1.2
这个命令会在传输数据时使用压缩算法,并显示sftp的详细输出。
实例10:使用安静模式和帮助信息
如果你想减少sftp的输出,或者查看sftp的帮助信息,你可以使用-q和-h选项来启用安静模式和帮助信息,例如:
[linux@bashcommandnotfound.cn ~]$ sftp -q linux@192.168.1.2
这个命令会连接到远程服务器,但不显示任何信息。
[linux@bashcommandnotfound.cn ~]$ sftp -h
这个命令会显示sftp的帮助信息,并退出。
实例11:使用通道转发
如果你想通过一个中间服务器来连接到另一个远程服务器,你可以使用ssh的通道转发功能,例如:
[linux@bashcommandnotfound.cn ~]$ ssh -f -N -L 10022:192.168.1.2:22 linux@192.168.1.3
这个命令会在后台创建一个SSH连接到192.168.1.2服务器,并将本地的10022端口转发到192.168.1.3服务器的22端口。
然后,你可以使用sftp命令,指定本地的10022端口来连接到192.168.1.3服务器,例如:
[linux@bashcommandnotfound.cn ~]$ sftp -P 10022 linux@localhost
这个命令会通过本地的10022端口来连接到192.168.1.3服务器。
Linux sftp命令的注意事项
使用sftp命令时,有一些注意事项需要了解,下面列出了一些常见的注意事项:
- sftp命令只能在支持SSH协议的远程服务器上使用,如果远程服务器没有安装或启动SSH服务,你会收到类似于以下的错误信息:
ssh: connect to host 192.168.121.199 port 22: Connection refused
Couldn't read packet: Connection reset by peer
- sftp命令需要你有远程服务器上的文件或目录的访问权限,如果你没有足够的权限,你会收到类似于以下的错误信息:
Couldn't stat remote file: Permission denied
Couldn't delete file: Permission denied
- sftp命令不支持通配符(如*或?)来匹配多个文件或目录,如果你使用通配符,你会收到类似于以下的错误信息:
Can't ls: "/home/linuxize/*.txt" not a regular file
- 如果你在本地系统上没有安装sftp命令,你会收到类似于以下的错误信息:
bash: sftp: command not found
如果你遇到这个问题,你可以按照上面的方法安装openssh-client软件包,或者使用其他的文件传输工具,如scp或rsync。
评论区