侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux sftp命令教程:如何安全地传输文件和目录(附实例教程和注意事项)

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。

0

评论区