通过 SSH 在远程和本地系统之间传输文件的 4 种方法
或迟或早,你会发现自己处于这样的情况:你必须通过 SSH 将文件上传到远程服务器或从中复制文件。
有多种方法可以通过 SSH 传输文件。我将在这里讨论以下方法:
- scp:已被弃用的旧命令
- rsync:流行的文件同步命令
- sshfs:通过 SSH 挂载远程目录
- sftp 客户端:用于通过 SFTP 访问文件的 GUI 工具
为了通过 SSH 成功传输文件,您需要
- 两台机器之间有 SSH 访问权限
- 知道远程机器上的用户名和密码
- 知道远程计算机的IP 地址或主机名(在同一子网内)
除此之外,让我们看看通过 SSH 在远程系统之间复制文件的方法。
方法 1:使用 scp 命令通过 SSH 复制文件
我读到过 scp 即将被弃用的消息。不过,它仍然是我最喜欢的通过 SSH 在系统之间传输文件的工具。为什么?因为它的语法类似于 cp 命令。
让我们看看如何使用 scp 命令。
将文件从远程计算机复制到本地计算机
场景如下。您想要将文件从远程 Linux 系统复制到当前登录的系统。
这是一个通用语法,将文件从远程系统上用户的主目录复制到本地登录系统的当前目录。
scp username@ip_address:/home/username/filename .
你看到了它与 cp 命令的相似之处吗?除了必须用冒号 (:) 指定用户名和 IP 地址外,它几乎相同。
现在,让我向您展示此命令的一个真实示例。
在上面的例子中,我将文件remote.txt
从/home/abhishek/my_file
远程系统上的目录复制到本地机器的当前目录。
这应该会提示您,您应该知道远程系统上文件的确切位置。制表符补全在远程系统上不起作用。
将文件从本地计算机复制到远程计算机
这里的场景略有不同。在这个场景中,您将使用 scp 通过 SSH 将本地文件发送到远程系统。
这是一个通用语法,它会将文件名复制到远程系统上用户名的主目录。
scp filename username@ip_address:/home/username
在上面的例子中,我将文件从当前目录复制到远程系统上local.txt
用户的主目录。abhishek
然后我登录到远程系统,显示文件确实已被复制。
您也可以复制目录
还记得我告诉过你我喜欢 scp 因为它与 cp 命令相似吗?
与 cp 命令一样,您也可以使用 scp 通过 SSH 复制目录。语法也与 cp 命令类似。您只需使用该-r
选项即可。
scp -r source_dir username@ip_address:/home/username/target_dir
你可以用它做更多的事情。在本教程中阅读scp 命令的更多示例:
方法 2:使用 rsync 通过 SSH 复制文件和目录
由于 scp 已被弃用,rsync 成为通过 SSH 在远程系统之间复制文件的第二佳工具。实际上,它在很多方面都比 scp 更好。
命令语法与 scp 相同。旧版本的 rsync 必须使用,rsync -e ssh
但现在不再如此。
将文件从远程计算机复制到本地计算机
假设您要将文件从远程系统上的用户主目录复制到本地登录系统的当前目录。
rsync username@ip_address:/home/username/filename .
让我们以您在 scp 中看到的相同示例为例。我正在将文件remote.txt
从/home/abhishek/my_file
远程系统上的目录复制到本地计算机的当前目录。
将文件从本地计算机复制到远程计算机
这是一个通用语法,它将文件复制到远程系统上用户名的主目录。
rsync filename username@ip_address:/home/username
是时候看看现实世界的例子了。我正在将文件从当前目录复制到远程系统上local.txt
用户的主目录。abhishek
使用 rsync 复制目录怎么样?
是一样的。只需使用-r
rsync 选项即可通过 SSH 在远程系统之间复制整个目录。
rsync -r source_dir username@ip_address:/home/username/target_dir
看一下这个例子。我将整个 my_file 目录从远程系统复制到本地系统。
rsync 是一款多功能工具。它本质上是一款用于“递归同步”两个目录之间内容的工具,在自动备份方面颇受欢迎。
方法 3:使用 SSHFS 通过 SSH 从远程系统访问文件
还有 SSHFS(SSH 文件系统)可用于访问远程文件和目录。但是,这对于复制文件来说不太方便。
在此方法中,您将远程目录挂载到本地系统上。挂载后,您可以在挂载的目录和本地系统之间复制文件。
您可能需要首先使用发行版的包管理器在本地系统上安装 sshfs。
在 Debian 和 Ubuntu 上,您可以使用以下命令:
sudo apt install sshfs
在系统上安装 sshfs 后,您可以使用它来挂载远程目录。最好为挂载点创建一个专用目录。
mkdir mount_dir
现在以这种方式在远程机器上挂载所需的目录:
sshfs username@IP_address:path_to_dir mount_dir
一旦安装完毕,您就可以将文件复制到此目录中,或者从此目录复制文件,就像它在您的本地机器上一样。
cp local_file mount_dir
请记住,您已挂载此文件。一旦完成工作,您还应该卸载它:
umount mount_dir
下面是一个示例,我将my_file
远程系统的目录挂载到remote_dir
本地系统上的目录。我将文件复制remote.txt
到本地系统,然后卸载该目录。
方法 4:使用基于 GUI 的 SFTP 客户端在远程系统之间传输文件
作为最后的手段,您可以使用 FTP 客户端在远程和本地系统之间传输文件。
FileZilla是最流行的跨平台 FTP 客户端之一。您可以轻松地将其安装在本地系统上。
安装后,转到文件->站点管理器并添加远程系统详细信息,如 IP 地址、SSH 端口号、用户名和密码。
一旦连接,您就可以看到一个分割窗口视图,左侧显示本地文件系统,右侧显示远程文件系统。
要传输文件,请从左到右或从右到左拖放文件。底部会出现一个进度条。
您喜欢哪种方法?
好了!我展示了可用于通过 SSH 复制文件的各种命令行和 GUI 方法。
现在由您决定使用哪种方法。请评论您通过 SSH 传输文件的首选方法。