15个Linux中SFTP命令的示例

SFTP或安全文件传输协议是一种基于文件传输协议(FTP)的安全远程文件传输实用工具。

FTP流量是未加密和不安全的,这就是为什么它大部分被SFTP所取代的原因。

SFTP默认在TCP端口22上通过SSH协议运行,并提供与SSH相同的安全性和加密能力。在Linux系统上作为OpenSSH服务器的一部分运行的默认SSH守护进程默认支持SFTP协议的基本功能,但也可使用独立的专用软件(如vsftpd)进行额外的功能和定制。

在本文中,我们将介绍如何在命令行中使用SFTP。我将使用Ubuntu系统,但这里列出的命令适用于任何带有sftp客户端的系统。

在进入命令之前,您应该知道scp命令链接_1和作为替代方案,建议熟悉SFTP命令。您可以使用SFTP执行几乎与SCP相同的操作。

复制文件

SFTP可以用作某些支持用例中SCP(Secure Copy)命令的替代品。其中之一是使用SCP一次性从远程服务器推送或拉取文件。

使用SCP命令上传的语法如下:

$ scp {local-path} {user}@{remote-host}:{remote-path}

下载的语法如下:

$ scp {user}@{remote-host}:{remote-file-path} {local-path}

同样,我们可以使用以下sftp命令语法将文件上传到远程服务器:

$ sftp {user}@{host}:{remote-path} <<< $'put {local-path}'

下面是一个演示使用sftp的一行命令上传文件:

$ sftp [email protected]:/home/ftpuser/remote_test_dir << put /home/abhisheknair/new_file
Uploading /home/abhisheknair/new_file to /home/ftpuser/remote_test_dir/new_file
/home/abhisheknair/new_file                                                           100%    9     7.2KB/s   00:00
$

要从远程服务器下载文件,请使用以下命令语法:

$ sftp {user}@{remote-host}:{remote-file-name} {local-file-name}

下面是使用sftp下载文件的演示:

$ sftp [email protected]:/home/ftpuser/new_file1 /home/abhisheknair/new_local_dir
[email protected]'s password:
Connected to 192.168.1.231.
Fetching /home/ftpuser/new_file1 to /home/abhisheknair/new_local_dir/new_file1
/home/ftpuser/new_file1                                                               100%   12     3.6KB/s   00:00
$

您还可以进行无密码身份验证。

连接到SFTP服务器

要初始化SFTP连接,请使用用户名和远程主机的名称或IP运行sftp命令。默认情况下,TCP端口22应该是打开的,否则请使用-oPort标志显式指定端口。

我正在连接到一个具有IP 192.168.1.231的SFTP服务器。当您首次连接到SFTP服务器时,您将被提示确认服务器指纹,就像SSH一样。一旦通过输入“yes”确认连接,它会继续并提示输入用户密码。

成功连接后,您将看到sftp>提示。

$ sftp [email protected]
无法确定主机 '192.168.1.231 (192.168.1.231)' 的真实性。
ECDSA key fingerprint is SHA256:k90E28Pfnjoiq1svFw18dA2mazweoCmR5Hqi8SH0mj0。
是否继续连接 (yes/no/[fingerprint])? yes
警告: 已永久添加 '192.168.1.231' (ECDSA) 到已知主机列表中。
[email protected]'s password:
已连接到 192.168.1.231。
sftp>

检查版本

您可以在sftp提示符下使用version命令检查SFTP版本。

sftp> version
SFTP协议版本 3
sftp>

获取帮助

要获取有关SFTP可用命令和语法的帮助,请使用‘?’或‘help’。

sftp> ?
可用命令:
bye 退出sftp
cd path 更改远程目录为 'path'
chgrp [-h] grp path 将文件 'path' 的组更改为 'grp'
chmod [-h] mode path 更改文件 'path' 的权限为 'mode'
chown [-h] own path 更改文件 'path' 的所有者为 'own'
df [-hi] [path] 显示当前目录或包含 'path' 的文件系统的统计信息
exit 退出sftp
get [-afpR] remote [local] 下载文件
help 显示此帮助文本
lcd path 更改本地目录为 'path'
lls [ls-options [path]] 显示本地目录列表
lmkdir path 创建本地目录
ln [-s] oldpath newpath 连接远程文件(-s 用于符号链接)
lpwd 打印本地工作目录
ls [-1afhlnrSt] [path] 显示远程目录列表
lumask umask 设置本地umask为 'umask'
mkdir path 创建远程目录
progress 切换显示进度条
put [-afpR] local [remote] 上传文件
pwd 显示远程工作目录
quit 退出sftp
reget [-fpR] remote [local] 恢复下载文件
rename oldpath newpath 重命名远程文件
reput [-fpR] local [remote] 恢复上传文件
rm path 删除远程文件
rmdir path 删除远程目录
symlink oldpath newpath 创建远程文件的符号链接
version 显示SFTP版本
!command 在本地shell中执行 'command'
! 转到本地shell
? 帮助的同义词
sftp>

显示工作目录

连接到远程服务器后,可以使用pwd命令显示远程系统的当前工作目录。

sftp> pwd
远程工作目录: /home/ftpuser
sftp>

要显示本地系统的当前工作目录,请使用lpwd命令。

sftp> lpwd
本地工作目录: /home/abhisheknair
sftp>

列出文件

您可以使用ls命令列出远程工作目录中的文件。

sftp> ls
remote_file1     remote_file2     remote_file3     remote_test_dir
sftp>

要列出本地工作目录中的文件,请使用lls命令。

sftp> lls
bin  file1  file2  file3  lib  oci-scripts  sys_info.sh  test.tgz  testdir
sftp>

切换目录

您可以使用cd命令切换远程工作目录。请参考下面的示例:

sftp> pwd
远程工作目录: /home/ftpuser
sftp> ls
remote_file1     remote_file2     remote_file3     remote_test_dir
sftp> cd remote_test_dir
sftp> pwd
远程工作目录: /home/ftpuser/remote_test_dir
sftp>

要切换本地工作目录,请使用lcd命令。以下是使用lcd命令的简单示例:

sftp> lpwd
本地工作目录: /home/abhisheknair
sftp> lls
bin  file1  file2  file3  lib  oci-scripts  sys_info.sh  test.tgz  testdir
sftp> lcd testdir
sftp> lpwd
本地工作目录: /home/abhisheknair/testdir
sftp>

上传文件

要上传单个文件,请使用put命令。看看我如何使用put命令将本地的 file1 上传到远程工作目录。我可以使用ls命令来验证它,该命令打印远程工作目录的内容。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> lpwd
本地工作目录:/home/abhisheknair
sftp> ls
remote_file1     remote_file2     remote_file3     remote_test_dir
sftp> lls
bin  file1  file2  file3  lib  oci-scripts  sys_info.sh  test.tgz  testdir
sftp> put file1
正在将file1上传到/home/ftpuser/file1
file1                                                                                                                                                                          100%    6     6.0KB/s   00:00
sftp> ls
file1            remote_file1     remote_file2     remote_file3     remote_test_dir
sftp>

要一次上传多个文件,我们可以使用mput命令,如下所示。我使用mput与正则表达式模式file[23]一起使用,它基本上上传file2file3并跳过file1,因为它已经在前面的步骤中上传过了。您可以使用任何通配符或正则表达式与mput一起使用。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> lpwd
本地工作目录:/home/abhisheknair
sftp> ls
file1            remote_file1     remote_file2     remote_file3     remote_test_dir
sftp> lls
bin  file1  file2  file3  lib  oci-scripts  sys_info.sh  test.tgz  testdir
sftp> mput file[23]
正在将file2上传到/home/ftpuser/file2
file2                                                                                                                                                                          100%    6     6.5KB/s   00:00
正在将file3上传到/home/ftpuser/file3
file3                                                                                                                                                                          100%    6     5.3KB/s   00:00
sftp> ls
file1            file2            file3            remote_file1     remote_file2     remote_file3     remote_test_dir
sftp>

下载文件

使用SFTP可以使用get命令下载单个文件。以下是一个示例,我使用sftp下载了remote_file4

sftp> pwd
远程工作目录:/home/ftpuser/remote_test_dir
sftp> lpwd
本地工作目录:/home/abhisheknair/testdir
sftp> ls
remote_file4
sftp> lls
file4
sftp> get remote_file4
正在获取/home/ftpuser/remote_test_dir/remote_file4到remote_file4
/home/ftpuser/remote_test_dir/remote_file4                                                                                                                                     100%   13     5.2KB/s   00:00
sftp> lls
file4  remote_file4
sftp>

要下载多个文件,请使用mget命令。我在这里下载了所有与远程工作目录中的模式remote_file*匹配的文件到我的本地工作目录。最后,我使用lls命令查看已下载的文件。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> lpwd
本地工作目录:/home/abhisheknair/testdir
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
file4 remote_file4
sftp> mget remote_file*
获取 /home/ftpuser/remote_file1 到 remote_file1
/home/ftpuser/remote_file1 100% 12 5.9KB/s 00:00
获取 /home/ftpuser/remote_file2 到 remote_file2
/home/ftpuser/remote_file2 100% 13 5.8KB/s 00:00
获取 /home/ftpuser/remote_file3 到 remote_file3
/home/ftpuser/remote_file3 100% 13 7.3KB/s 00:00
sftp> lls
file4 remote_file1 remote_file2 remote_file3 remote_file4
sftp>

创建目录

可以使用mkdir命令在远程服务器上创建新目录。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> ls
file1            file2            file3            remote_file1     remote_file2     remote_file3     remote_test_dir
sftp> mkdir new_dir
sftp> ls
file1            file2            file3            new_dir          remote_file1     remote_file2     remote_file3     remote_test_dir
sftp>

类似地,如果要在sftp提示符下在本地系统的当前工作目录上创建新目录,请使用lmkdir命令。

sftp> lpwd
本地工作目录:/home/abhisheknair
sftp> lls
bin  file1  file2  file3  lib  oci-scripts  sys_info.sh  test.tgz  testdir
sftp> lmkdir new_local_dir
sftp> lls
bin  file1  file2  file3  lib  new_local_dir  oci-scripts  sys_info.sh  test.tgz  testdir
sftp>

删除目录

可以使用rmdir命令删除空的远程目录。请注意,如果目录不为空,您将收到一个错误。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> ls
file1            file2            file3            new_dir          remote_file1     remote_file2     remote_file3     remote_test_dir
sftp> rmdir new_dir
sftp> ls
file1            file2            file3            remote_file1     remote_file2     remote_file3     remote_test_dir
sftp>

删除文件

可以使用rm命令删除远程文件。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> ls
file1            file2            file3            remote_file1     remote_file2     remote_file3     remote_test_dir
sftp> rm remote_file3
删除 /home/ftpuser/remote_file3
sftp> ls
file1            file2            file3            remote_file1     remote_file2     remote_test_dir
sftp>

重命名文件

可以使用rename命令轻松重命名远程文件。

sftp> pwd
远程工作目录:/home/ftpuser
sftp> ls
file1            file2            file3            remote_file1     remote_file2     remote_test_dir
sftp> rename remote_file1 new_file1
sftp> ls
file1            file2            file3            new_file1        remote_file2     remote_test_dir
sftp>

文件系统使用情况

要显示当前目录或包含“路径”的文件系统的统计信息,请使用df命令。我们可以使用-h标志以人类可读的格式显示统计信息。请注意,显示的统计信息是远程SFTP服务器的相应文件系统的统计信息,而不是本地计算机的文件系统。

sftp> df
        大小        已使用       可用空间      (根目录)     %容量
    17811456      1845472     15965984     15965984          10%
sftp> df -h
    大小     已使用    可用空间   (根目录)    %容量
  17.0GB    1.8GB   15.2GB   15.2GB          10%
sftp>

退出SFTP会话

要退出SFTP会话,请使用byeexitquit命令。退出SFTP后,您将返回到操作系统提示符。

sftp> exit
$

结论

SFTP是一个安全且易于使用的最佳选择之一。它提供了CLI和GUI功能,并支持不同平台。请参阅sftp的man页面进行进一步阅读。

$ man sftp

如果您有兴趣了解更多信息,请查看此Udemy Linux Mastery course

类似文章