如何在 Linux 中使用 sftp 命令
本教程介绍如何在 Linux 中通过 sftp 协议连接和传输文件,以及如何通过实施安全措施来确保安全。
sftp命令对于每个网络用户(包括国内用户)来说是最有用的工具之一。该命令也可以在 Windows 系统中实现,这使其对每种网络类型都有吸引力。
这是在计算机之间安全共享文件的主要命令行工具之一。此外,为了下载和上传文件和目录,用户可以远程更改权限、删除和重命名文件等。
SFTP 这个命令肯定会改善命令行的网络体验。
阅读本文并应用示例(也可以在虚拟机中重现)后,读者将了解如何配置 Linux 系统以交互模式和命令行方式使用 sftp 命令传输文件。
内容适用于所有 Linux 发行版,并包含真实场景屏幕截图,使所有读者能够轻松理解如何独立于之前的知识水平应用命令。
sftp 简介
以前,FTP(文件传输协议)是在客户端和服务器之间或两个网络设备之间传输文件的唯一方法。
用户过去从 FTP 服务器上传所有下载文件,并具有在允许的目录上读写的权限。
但 FTP 协议遭受了高风险漏洞,并被更新、更安全的协议所取代。两个众所周知的例子是 SCP(安全复制协议)和 SFTP(安全文件传输协议)。 SFTP 是 FTP 协议最流行的替代品之一。
与 FTP 一样,SFTP 可以通过交互式文本模式或执行单个命令来使用。本教程解释了这两种技术。
使用 sftp 的先前要求
sftp 协议要求在您要从中下载文件或向其中上传文件的服务器上安装并运行 ssh(安全外壳)。
如果您的服务器已经运行 ssh,您可以跳到下一个 sftp 部分。
在基于 Debian 的 Linux 发行版上,可以使用 apt 包管理器安装 ssh,如下面的屏幕截图所示。
在基于 RedHat 的 Linux 发行版上,可以通过执行以下命令来安装 ssh:
安装后,在要连接的服务器上,使用 systemctl 命令启动服务,如下所示(基于 Debian 的发行版)。
要在基于 RedHat 的发行版上启动 ssh 服务,请运行:
如何在交互模式下使用sftp
本节介绍sftp交互模式的使用。
在出现 sftp 命令提示符之前,访问 sftp 服务器所要执行的唯一命令是连接请求,其语法与 ssh 类似和SCP。
下面的示例描述了正确的语法,其中 <User> 必须替换为服务器上的现有用户,<ServerIP> 必须替换为服务器主机或 IP 地址。
在下面的屏幕截图中,本地用户 linux-hint3 作为远程用户 linux 连接到 IP 地址为 192.168.0.103 的服务器。
用户第一次连接到服务器时,将被要求确认连接。用户必须输入“yes”,按ENTER并填写密码。
用户连接后,服务器将返回 sftp> 命令提示符,用户可以在其中执行 sftp 命令。
sftp交互模式允许用户与本地和远程系统交互。
正常的 Linux 命令对服务器有影响。以“l”开头的命令在本地系统中执行。
例如,如果用户执行pwd命令,则会显示远程当前工作目录。但如果用户运行lpwd,它将显示本地当前目录。
默认情况下,本地远程目录是远程用户的主目录,但以下示例中远程用户没有主目录的情况除外。
在下面的屏幕截图中,执行pwd命令来显示远程当前工作目录。
然后执行lpwd来显示本地当前工作目录。
正如您在上面的屏幕截图中看到的,远程当前工作目录是根目录(因为 linux4 远程用户用户没有主目录),本地工作目录是本地主目录。
如果用户运行ls(列表)命令,它将显示当前工作目录中的远程文件和目录。
通过执行lls(本地列表),该命令将显示本地当前工作目录中的文件和目录。
使用cd(更改目录)命令,用户可以在远程目录之间移动。使用lcd(本地更改目录)命令,用户可以在本地目录之间移动,如下图所示。
从服务器下载文件的语法如下:
或者
在下面的示例中,用户下载名为 file10 的文件,然后运行 lls(本地列表)以确认文件已正确下载。
要下载目录,除了 -r 标志之外,语法几乎相同,如下所示。
或者
在下面的示例中,用户下载名为 Directory1 的目录。
要上传文件,语法如下:
在下面的实际示例中,用户上传名为 <file> 的文件
要上传目录,只需添加 -r 标志。
或者
用户还可以使用相同的 Linux 命令远程删除文件。例如,要删除文件,只需运行:
要删除目录,请添加 -r 标志,如下所示。
df -h 命令可用于显示服务器总空间、已用空间和可用空间。
用户还可以使用 chmod 命令更改文件和目录权限,如下例所示。
要退出交互模式,请运行exit。
退出 sftp 会话的另一种方法是使用 bye 命令。
通过单个命令使用 sftp
此外,对于交互模式,sftp 可以与单个命令一起使用。本节介绍如何在没有事先连接到交互模式的情况下下载和上传文件。
下载文件的语法如下:
在下面的示例中,用户以 linux5 用户身份登录,并将 targets.txt 远程文件下载到由句点表示的本地目录。
在下面的实际示例中,用户将位于远程 testdir/ 子目录中名为 something2.txt 的文件下载到本地 Desktop/ 子目录。
如下例所示,通过添加-r标志,用户可以递归下载目录。在以下示例中,用户将 testdir/ 目录下载到本地 Desktop/ 目录。
要通过使用 sftp 执行单个命令来上传文件,请应用以下语法。
在下面的示例中,本地File2上传到testdir/目录。
要上传目录,请使用以下语法添加 -r 选项
在下面的示例中,Desktop/ 本地目录被上传到远程 perl5/ 目录。
通过密钥身份验证提高 sftp 安全性
默认情况下,sftp 连接是安全的并受 ssh 协议保护。
但风险之一是由于密码脆弱性而导致的默认密码登录方法,其中包括密码交换或密码共享通道、过程。其中,密码可能会被泄露,例如,通过 MiM(中间人)攻击,然后进行成功的描述。
如果服务器配置不正确,密码登录可能会使系统遭受暴力攻击。
为了防止这种情况,中小型网络的一个好做法是实施 ssh 密钥身份验证并禁用密码登录。
实现ssh密钥认证并禁用密码登录
sftp安全性是由ssh协议授予的,其配置文件为/etc/ssh/sshd_config,用户需要编辑该文件来启用密钥验证并禁用密码登录更多加强安全的选择。
在允许传入连接的服务器上,使用 nano 或 vi 等纯文本编辑器以具有权限的方式编辑 /etc/ssh/sshd_config 文件。
要启用密钥身份验证,请在服务器计算机上使用权限打开/etc/ssh/sshd_config文件,并找到包含PubkeyAuthentication no的行。将其替换为 PubkeyAuthentication yes(将“no”替换为“yes”)。
另请确认 PermitRootLogin no 以禁用 root 登录。
暂时不要编辑禁用密码登录的选项,因为密钥共享过程需要密码身份验证,然后系统才能使用密钥进行身份验证。
退出保存更改的配置文件并重新启动 ssh 服务。
基于 Debian 的 Linux 发行版:
基于 RedHat 的 Linux 发行版:
在客户端,请求传出连接时,通过执行 ssh-keygen 命令生成密钥对。
该过程将请求确认密钥目录,按 ENTER 保留默认本地目录 (~/.ssh/id_rsa) 或 Linux 发行版中的等效目录。该过程将提供登录时所需的密码短语。通过添加密码短语,可以提高安全性。建议输入一并按 ENTER。如果您不想添加密码,只需按 ENTER 即可,无需输入密码。
现在,客户端必须使用以下示例的语法通过命令 ssh-copy-id 与服务器共享密钥。
共享密钥后,通过连接到服务器来测试密钥认证方法。
如果身份验证成功,用户将无需密码即可登录。如果用户定义了密码,则将请求该密码而不是密码,如下例所示。
检查密钥验证是否有效后,强烈建议禁用密码登录。
在服务器端,使用 nano 等文本编辑器再次编辑文件 /etc/ssh/sshd/config > 或vi。
向下滚动并将行 PasswordAuthentication yes 替换为 PasswordAuthentication no。
重新启动 ssh 服务。
基于 RedHat 的 Linux 发行版:
现在,认证的安全性得到了适当的提高。
结论
Sftp 是一个非常有用的在设备之间共享文件的工具,并提供两种简单的模式。 sftp 协议可以安装在每个操作系统上,提供安全性、可靠性和速度。另外,SCP 命令还提供可靠性、速度和安全性,并通过 ssh 协议工作。第二个命令在 Linux Hint 中也有深入解释(该链接已在本文档的介绍中给出)。