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]一起使用,它基本上上传file2和file3并跳过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会话,请使用bye
、exit
或quit
命令。退出SFTP后,您将返回到操作系统提示符。
sftp> exit
$
结论
SFTP是一个安全且易于使用的最佳选择之一。它提供了CLI和GUI功能,并支持不同平台。请参阅sftp
的man页面进行进一步阅读。
$ man sftp
如果您有兴趣了解更多信息,请查看此Udemy Linux Mastery course。