如何使用SSH或SFTP在本地机器和远程机器之间安全地传输文件

在本文中,我们将向您展示如何使用 SFTP(安全文件传输协议),也称为 SSH 文件传输协议,在本地机器和远程机器之间安全地传输文件。命令行提供了其他替代文件传输功能,例如SCP,它在后台也使用 SSH(安全外壳)。在示例中,我们将使用托管在本地计算机上的示例文件 netflix_titles.csv.zip,我们将使用 SFTP 安全地传输它。

如何使用SSH或SFTP在本地机器和远程机器之间安全地传输文件-南华中天

使用 SSH 登录远程服务器

SSH 在两个系统之间创建安全连接。对于此示例,您将需要一个本地和一个远程系统。如果您没有远程系统,请在 Windows 或 Linux 上快速配置远程服务器并使用您的 root(用户名)和密码登录以进行身份​​验证:

ssh root@172.105.186.216 
root@172.105.186.216的密码:
上次登录:Fri Feb 26 14:28:52 2021 from 180.150.39.150 
[ root@sm2134-216 ~]#

或者,您可以生成用于身份验证的 SSH 密钥(公钥和私钥对)并使用它登录到远程服务器。要确保远程服务器上不存在任何文件,请检查当前目录并列出该目录的内容:

[ root@sm2134-216 ~]# pwd 
/root 
[ root@sm2134-216 ~]# ls

如果您配置了新服务器,则根目录中将没有文件。退出远程机器并跳回本地机器并列出当前目录中的文件和子目录:

[ root@sm2134-216 ~]# exit 
░▒▓ ~/Projects/ServerMania ▓▒░─────────────────░▒▓ 在 12:10 花了 6m 1s ≡ : 39 ▓▒░ 
❯ 
netflix_titles.csv.zip

该目录包含一个文件netflix_titles.csv.zip,我们将使用 SFTP 命令将其传输到远程计算机。在本例中,我们使用的是 root 用户,但请确保您的用户对远程服务器具有写权限。

使用 SFTP 登录远程服务器

SFTP或安全文件传输协议是对传统FTP(文件传输协议)的升级。SFTP 使用 SSH(安全外壳)来保护连接。

让我们使用 SFTP 命令登录到远程机器并启动 SFTP 会话并运行?或帮助命令:

❯ sftp root@172.105.186.216 
root@172.105.186.216的密码:
连接到 172.105.186.216。
sftp> ?

这将列出所有可能的 SFTP 命令,但我们只想查看其中的几个。这些命令中的大多数类似于用于导航、文件和目录创建等的基本 shell 命令。让我们看一些 SFTP 命令的示例:

  1. sftp> put - 上传文件
  2. sftp> get - 下载文件
  3. sftp> cd path - 将远程目录更改为“路径”
  4. sftp> pwd - 显示远程工作目录
  5. sftp> lcd path - 将本地目录更改为“路径”
  6. sftp> lpwd - 显示本地工作目录
  7. sftp> ls - 显示远程工作目录的内容
  8. sftp> lls - 显示本地工作目录的内容

在下面的代码片段中,您可以看到上面提到的一些命令的示例在 SFTP 提示符下运行:

░▒▓ ~/Projects/ServerMania ▓▒░────────────────────────────░▒▓ ≡ 20:51: 54 ▓▒░ 
❯ sftp root@172.105.186.216 
root@172.105.186.216的密码:
连接到172.105.186.216。
sftp> pwd
远程工作目录:/root 
sftp> ls 
sftp> lpwd
本地工作目录:/Users/kovid/Projects/ServerMania 
sftp> 
sftp> mkdir files 
sftp> cd files 
sftp> pwd
远程工作目录:/root/files 
sftp> cd .. 
sftp> rmdir 文件
sftp>

既然您知道如何导航本地机器和远程服务器的文件系统,您将学习如何将文件从一个机器传输到另一个机器。

将文件从本地计算机传输到远程服务器

首先,让我们看看如何使用安全文件传输协议将文件从本地机器传输到远程机器。登录服务器以访问 SFTP 提示并导航到本地目录,该目录包含要传输的文件:

连接到 172.105.186.216。
sftp> lpwd
本地工作目录:/Users/kovid 
sftp> lcd /Users/kovid/Projects/ServerMania 
sftp> lpwd
本地工作目录:/Users/kovid/Projects/ServerMania 
sftp> 
lls netflix_titles.csv.zip 
sftp> put netflix_titles. csv.zip
上传 netflix_titles.csv.zip 到 /root/netflix_titles.csv.zip 
netflix_titles.csv.zip 100% 1207KB 1.5MB/s 00:00 
sftp>

如您所见,使用put命令,我们已成功将文件netflix_titles.csv.zip从本地机器传输到远程机器。请注意,我们没有提供远程机器上的任何路径,因此文件被复制到远程机器的当前目录中。通过运行ls命令验证文件是否已被复制:

sftp> pwd
远程工作目录:/root 
sftp> ls 
netflix_titles.csv.zip 
sftp> bye

使用bye命令关闭连接(SFTP 会话)。

将文件从远程服务器传输到本地计算机

现在,让我们从本地机器中删除本地文件,然后使用get命令从远程服务器获取远程文件将其复制回来:

❯ pwd 
/Users/kovid/Projects/ServerMania 
❯ ls 
netflix_titles.csv.zip 
░▒▓ ~/Projects/ServerMania ▓▒░──────────────────── ────░▒▓ ≡ 21:16:22 ▓▒░ 
❯ rm netflix_titles.csv.zip 
░▒▓ ~/Projects/ServerMania ▓▒░───────────── ────────────░▒▓ ≡ 21:16:32 ▓▒░ 
❯ ls 
░▒▓ ~/Projects/ServerMania ▓▒░────────────── ──────────────░▒▓ ≡ 21:16:34 ▓▒░ 
❯

从本地系统中删除文件后,再次与远程机器建立 SFTP 连接:

❯ sftp root@172.105.186.216 
root@172.105.186.216的密码:
连接到 172.105.186.216。
sftp> get netflix_titles.csv.zip
获取 /root/netflix_titles.csv.zip 到 netflix_titles.csv.zip 
/root/netflix_titles.csv.zip 100% 1207KB 4.8MB/s 00:00 
sftp> 
sftp> lpwd
本地工作目录: /Users/kovid/Projects/ServerMania 
sftp> 
lls netflix_titles.csv.zip 
sftp> 再见

或者,您也可以使用 SFTP 命令将远程文件复制到本地系统,而无需从本地命令行建立持久连接。这不必使用get命令。看下面的命令:

░▒▓ ~/Projects/ServerMania ▓▒░────────────────────────░▒▓ ≡ 21:25:12 ▓▒░ 
❯ sftp root@172.105.186.216 :netflix_titles.csv.zip 。
root@172.105.186.216的密码:
连接到 172.105.186.216。
获取 /root/netflix_titles.csv.zip 到 ./netflix_titles.csv.zip 
/root/netflix_titles.csv.zip 100% 1207KB 4.8MB/s 00:00 
░▒▓ ~/Projects/ServerMania ▓▒░──── ──────────────░▒▓ 21:25:22 花了 4s ≡ ▓▒░ 
❯

下一步

SFTP 命令是一种在两台服务器之间直接传输文件的简单且安全的方法。现在您拥有轻松使用此命令所需的一切!

还在为让所有这些在 ServerMania 服务器上运行而寻求帮助吗?联系我们的支持团队,或在下面的评论中分享您的反馈!