FTP是一种非常流行的协议,称为文件传输协议,用于通过网络或internet在客户机和服务器之间传输文件。FTP存在很长一段时间,在它创建安全性时并不重要。但是现在它需要安全性,而SFTP或安全文件传输协议是在现有FTP的基础上创建的。SFTP在所有情况下都优于FTP,如果可能的话,应该使用SFTP。命令 sftp
用于连接远程SFTP服务器。它是为来自中央存储库的Linux发行版(如Ubuntu、Debian、Mint、CentOS、Fedora、RHEL、SUSE等)提供的。
SFTP协议有多个版本,其中 version 6
是2006年发布的最新sftp版本。作为一个简单而安全的协议,它不定期提供新功能。
SFTP命令
SFTP或SFTP交互式shell在登录SFTP服务器后提供以下命令。这些命令在交互式shell中执行。例如 exit
或 bye
通过退出交互式shell,可以使用命令关闭SFTP会话和连接。
命令 | 说明 |
---|---|
再见 | 退出SFTP |
出口 | 退出SFTP |
cd路径 | 将当前工作目录更改为路径 |
chgrp组路径 | 将路径的组所有权更改为组 |
chmod MOD路径 | 将路径的文件或文件夹权限更改为MOD |
lcd路径 | 将本地当前工作目录更改为路径 |
lls路径 | 列出指定路径上的本地文件和文件夹 |
ls路径 | 列出指定路径上的远程文件和文件夹 |
mkdir路径 | 创建指定路径的目录 |
进步 | 上载或下载期间显示进度 |
密码 | 打印远程系统工作目录 |
将旧路径重命名为新路径 | 将远程文件或文件夹从旧路径重命名为新路径 |
rm路径 | 删除指定路径上的远程文件或文件夹 |
版本 | 显示版本信息 |
连接SFTP服务器
SFTP使用SSH端口和服务连接远程系统。另外,身份验证是通过SSH子系统完成的,在SSH子系统中,当前SSH用户或系统用户用于登录。与SSH连接一样,SFTP身份验证可以通过密码、SSH密钥或证书来完成。为了连接SFTP服务器,我们将提供用户名 ismail
以及IP地址 192.168.142.133
就像下面一样。
$ sftp [email protected]Connected to 192.168.142.133.sftp> sftp> sftp>
建立连接后,将提供交互式SFTP外壳。所有SFTP命令都提供给这个shell来上传和下载文件和文件夹。默认情况下,会话创建需要密码进行身份验证,但在本例中,我们使用了证书进行身份验证。如果没有用于身份验证的证书设置,则会如下所示提示密码。
password:
基于无密码密钥的SFTP认证
与SSH一样,SFTP连接和身份验证可以使用SSH密钥完成,而无需为每个连接反复输入密码。首先,我们将当前用户公钥复制到远程SFTP服务器。但是当前用户可能没有公共和私有SSH密钥对。因此,首先我们将使用以下命令创建SSH密钥。
$ ssh-keygen Generating public/private rsa key pair.Enter file in which to save the key (/home/ismail/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ismail/.ssh/id_rsaYour public key has been saved in /home/ismail/.ssh/id_rsa.pubThe key fingerprint is:SHA256:US4aOw+rkYDBNSk+iVzFiHRZalYzfzSiFF3+72O5Vws [email protected]The key's randomart image is:+---[RSA 3072]----+|...+BOo..+. ||.oo==.=.+o. ||=.++ ...oo. ||.Bo +.o. ||. o = S . || . . = .E .|| o . . .o o|| o .+ o || . .o+ |+----[SHA256]-----+
创建公共和私有SSH密钥对,通过提供用户名,可以使用以下命令将公共密钥传输到远程SFTP或SSH服务器。公钥将与提供的用户名匹配,并且在每个connecton中,提供的公钥将用于无密码身份验证。
$ ssh-copy-id [email protected]The authenticity of host '192.168.142.133 (192.168.142.133)' can't be established.ECDSA key fingerprint is SHA256:FERLei2YfaohZ8FN5oNc8biHDR4i1jevewwSv9expJ0.Are you sure you want to continue connecting (yes/no/[fingerprint])? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys[email protected]'s password: Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.$
显示SFTP帮助信息
SFTP提供了与linuxshell类似的不同命令来列出文件。有关SFTP命令和说明的帮助信息可以与 ?
(问号)如下。或者 help
命令的SFTP交互shell可以根据 ?
.
sftp> ?Available commands:bye Quit sftpcd path Change remote directory to 'path'chgrp [-h] grp path Change group of file 'path' to 'grp'chmod [-h] mode path Change permissions of file 'path' to 'mode'chown [-h] own path Change owner of file 'path' to 'own'df [-hi] [path] Display statistics for current directory or filesystem containing 'path'exit Quit sftpget [-afpR] remote [local] Download filehelp Display this help textlcd path Change local directory to 'path'lls [ls-options [path]] Display local directory listinglmkdir path Create local directoryln [-s] oldpath newpath Link remote file (-s for symlink)lpwd Print local working directoryls [-1afhlnrSt] [path] Display remote directory listinglumask umask Set local umask to 'umask'mkdir path Create remote directoryprogress Toggle display of progress meterput [-afpR] local [remote] Upload filepwd Display remote working directoryquit Quit sftpreget [-fpR] remote [local] Resume download filerename oldpath newpath Rename remote filereput [-fpR] local [remote] Resume upload filerm path Delete remote filermdir path Remove remote directorysymlink oldpath newpath Symlink remote fileversion Show SFTP version!command Execute 'command' in local shell! Escape to local shell? Synonym for help
显示SFTP版本
在此期间,SFTP协议获得了新版本的新特性。SFTP的最新版本是3,在交互式SFTP连接中,SFTP版本可以与 version
命令如下。
sftp> versionSFTP protocol version 3sftp>
列出远程SFTP服务器上的文件
这个 ls
命令可用于列出远程服务器上的文件和文件夹。ls命令将在当前工作目录上运行。
sftp> lsDesktop Documents Downloads Music Pictures Public Templates Videos example.txt file1.txt file2.txt passwd snap test.txt test1
或者,可以指定路径,以便列出指定路径上的文件和文件夹。在下面的示例中,我们将列出 Downloads
.
sftp> ls Downloads/Downloads/DEBIAN Downloads/sample_5184×3456.bmp Downloads/teamviewer_15.9.5_amd64.deb
导航和更改目录
SFTP提供了与Linux类似的命令,以便列出当前工作目录、更改和导航本地和远程路径。我们可以使用 pwd
命令以列出远程或SFTP服务器当前的工作目录。
sftp> pwdRemote working directory: /home/ismail
还有 lpwd
命令可以用来列出本地系统当前的工作目录。就其性质而言,它不需要参数。
sftp> pwdRemote working directory: /home/ismail
可以使用 cd
命令。与Linux shell类似 .
或 ..
可用于当前和父目录规范。
sftp> pwdRemote working directory: /home/ismailsftp> cd Downloads/sftp> pwdRemote working directory: /home/ismail/Downloads
为了更改本地系统当前工作目录 lcd
命令。Like cd命令 .
和 ..
可用于当前目录和父目录。
sftp> lpwdLocal working directory: /home/ismailsftp> lcd Downloads/sftp> lpwdLocal working directory: /home/ismail/Downloads
从SFTP服务器下载文件和文件夹
SFTP最常用的操作和特性或者实际上是创建的原因是下载和上传文件和文件夹。这个 get
命令可用于将指定的文件和文件夹下载到本地当前工作目录。此操作将远程SFTP服务器文件安全地传输到本地目录。在下面的示例中,我们将下载名为 teamciewer_15.9.5_amd64.deb
到本地系统。
sftp> get teamviewer_15.9.5_amd64.deb Fetching /home/ismail/Downloads/teamviewer_15.9.5_amd64.deb to teamviewer_15.9.5_amd64.deb/home/ismail/Downloads/teamviewer_15.9.5_amd64.deb 0% 0 0.0KB/s --:-- ETA
或者,我们可以用新的或不同的名称定义下载文件名。我们只需将第二个参数作为新文件名添加到get命令中。在下面的示例中,我们将下载的文件名设置为 teamviewer.deb
.
sftp> get teamviewer_15.9.5_amd64.deb teamviewer.deb
默认情况下,下载的文件将放入本地当前工作目录。但我们可以通过添加下载路径和文件名来更改此路径。
sftp> get teamviewer_15.9.5_amd64.deb MyFiles/teamviewer.deb
为了递归下载文件夹及其内容 -r
选项应在get命令之后使用。此外,我们要下载的目录将提供这是 Downloads/
在这个例子中。我们可以在下面看到,内容是递归下载的,进度信息实时显示在屏幕上。
sftp> get -r Downloads/Fetching /home/ismail/Downloads/ to DownloadsRetrieving /home/ismail/Downloads/home/ismail/Downloads/sample_5184×3456.bmp 100% 51MB 6.3MB/s 00:08 Retrieving /home/ismail/Downloads/DEBIAN/home/ismail/Downloads/DEBIAN/conffiles 100% 40 18.4KB/s 00:00 /home/ismail/Downloads/DEBIAN/control 100% 1657 426.8KB/s 00:00 /home/ismail/Downloads/DEBIAN/prerm 100% 953 65.5KB/s 00:00 /home/ismail/Downloads/DEBIAN/preinst 100% 682 273.0KB/s 00:00 /home/ismail/Downloads/DEBIAN/postinst 100% 1125 569.0KB/s 00:00 /home/ismail/Downloads/DEBIAN/postrm 100% 789 419.6KB/s 00:00
我们还可以通过将新名称作为get命令的第二个参数来更改下载的目录名。在下面的示例中,我们将下载的文件名设置为 MyDownloads
.
sftp> get -r Downloads/ MyDownloads/
将文件上载到远程SFTP服务器
我们还可以使用SFTP将本地文件上传到远程SFTP服务器。这个 put
命令用于通过提供本地文件或文件夹名称将本地文件或文件夹上载到远程服务器。
sftp> put file1.txtUploading file1.txt to /home/ismail/file1.txtfile1.txt 0% 0 0.0KB/s --:-- ETA
为了将文件夹上载到远程SFTP服务器,应该为put命令提供递归选项。 -r
用于将递归文件夹和内容上载到远程服务器。
sftp> put -r Downloads
退出SCP交互式Shell或关闭SFTP连接
可以使用 exit
或 bye
命令如下。
sftp> sftp> sftp> exit$ $
或者使用 bye
SFTP命令如下。
sftp> sftp> sftp> bye$ $