如何在Linux和Windows中使用SSHFS通过SSH传输文件

时间:2020-01-09 10:39:47  来源:igfitidea点击:

有多种工具可用于在Linux服务器之间复制文件和目录。
在本文中,我们将使用SSHFS通过SSH从本地到远程以及从远程到本地服务器传输文件。

我们还可以使用以下工具在Linux服务器之间复制文件:

  • RSYNC-我个人的最爱

  • SCP

  • NFS

  • HTTPS

  • SFTP

  • 桑巴舞

SSHFS概述

  • SSHFS(安全shell文件系统)是用于Linux(以及其他具有FUSE实现的操作系统,例如Mac OS X或者FreeBSD)的文件系统,能够仅通过远程计算机上的安全Shell登录来对远程计算机上的文件进行操作。

  • sshfs命令是一个客户端工具,用于使用SSHFS从计算机本地的另一台服务器挂载远程文件系统。

  • SSHFS允许我们使用安装点从本地计算机上的远程服务器安装远程目录,并像对待其他目录一样对待它。

使用SSHFS的优势

  • 与其他共享文件系统(例如NFS和Samba)相比,我们不需要任何服务器或者客户端配置

  • SSHFS是一个简单的客户端工具,不需要任何其他配置

  • 我们还可以使用SSHFS在Linux和Windows Server之间通过SSH传输文件

  • 文件在完全加密的通道中传输,因此非常安全

使用SSHFS的缺点

  • 我们将远程目录安装在与NFS服务器类似的本地服务器上,但是使用SSHFS通过SSH进行传输时,会涉及加密和解密,这可能会影响性能

  • 我们还应该将数据保存在挂载点上,就像出现网络连接问题一样,这可能会丢失数据

在两台Linux服务器之间通过SSH传输文件

在Linux上安装SSHFS

SSHFS是一个开源项目,在大多数默认发行版存储库中均不可用

要在RHEL/CentOS 7上安装SSHFS,首先必须安装EPEL存储库

# yum -y install epel-release

提示:

在撰写本文时,SSHFS不适用于RHEL/CentOS 8

接下来在客户端节点上安装sshfs

[root@server1 ~]# yum -y install sshfs

在Ubuntu和Debian上安装sshfs

$sudo apt install sshfs

挂载远程文件系统

要使用SSHFS通过SSH传输文件,我们必须使用以下语法执行SSHFS:

sshfs [user@]host:[dir] mountpoint [options]

检查sshfs -h以获取受支持选项的完整列表。

在此示例中,我已在server1上安装了SSHFS,我们将进行挂载

server2中的远程目录(/shared)。

[root@server2 ~]# ls -l /shared/
total 0
-rw-r--r-- 1 root root 0 Jan 17 19:21 file1
-rw-r--r-- 1 root root 0 Jan 17 19:21 file2
-rw-r--r-- 1 root root 0 Jan 17 19:21 file3

到(/mount_point)server1`上的本地Linux节点

[root@server1 ~]# ls -l /mount_point/
total 0

因此,我们必须在server1上执行sshfs,我们使用root用户通过SSH传输文件。
我们可以使用任何普通用户,但是请确保该用户具有足够的权限来访问server2上的远程目录。

[root@server1 ~]# sshfs [email protected]:/shared /mount_point
[email protected]'s password:

没有错误报告,因此安装成功。
验证" server1"上的安装点

[root@server1 ~]# mount | grep shared
[email protected]:/shared on /mount_point type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)

现在,我们可以从本地Linux节点" server1"上"/mount_point"目录下的" server2"上访问远程目录("/shared")的内容。

[root@server1 ~]# ls -l /mount_point/
total 0
-rw-r--r--. 1 root root 0 Jan 17 19:21 file1
-rw-r--r--. 1 root root 0 Jan 17 19:21 file2
-rw-r--r--. 1 root root 0 Jan 17 19:21 file3

现在我们可以在" server1"的"/mount_point"下添加和修改内容,更改将在"/shared"的" server2"上反映出运行时。

我的终端的摘录

在Linux中通过SSH传输文件

要"永久挂载"此远程目录,请使用"/etc/fstab",并使用以下语法:

user@host:/remote/path  /local/mount_point  fuse.sshfs  defaults  0  0

在这个例子中,我们将在/etc/fstab中添加以下内容

[email protected]:/shared     /mount_point    fuse.sshfs    defaults   0  0

卸载远程文件系统

传输文件后,我们还可以使用umount卸载远程文件系统。
server1上执行umount

[root@server1 ~]# umount /mount_point/

使用/shared目录从远程服务器(即" server2")验证并确保没有安装路径

[root@server1 ~]# mount | grep shared

在Windows和Linux服务器之间通过SSH传输文件

  • 我们还可以使用SSHFS在Windows和Linux服务器之间通过SSH传输文件。

  • 这也可以使用Samba来实现,但是为了本文的目的,让我们专注于SSHFS

在Windows上安装SSHFS

  • 要在Windows和Linux之间通过SSH传输文件,必须在Windows服务器上安装SSHFS。

  • 我们可以从Github官方页面上获取安装所需的文件

  • 下载WinFsp并按照屏幕上的说明在Windows服务器上安装WinFsp下载SSHFS-Win并按照屏幕上的说明在Windows服务器上安装SSHFS-Win

  • 在撰写本文时,我已经安装了winfsp-1.6.20027.msisshfs-win-3.5.20024-x64.msi

挂载远程文件系统

在Windows服务器上安装了WinFsp和SSHFS-Win之后,接下来我们必须将远程服务器的网络位置映射到本地安装点

我正在使用" WIndows 10",因此我将根据环境共享说明。

在Windows资源管理器中,选择"此PC""映射网络驱动器"

地图网络驱动器

使用以下语法提供远程服务器和远程目录的路径

\sshfs\REMUSER@HOST[\PATH]

说明:

其中我们不能直接从远程Linux服务器将挂载点指定为/shared。
我们必须使用(/)来浏览Linux服务器。
在这个例子中,我们将使用以下命令连接到根用户的主文件夹

\sshfs\[email protected]\

挂载远程文件系统

提供远程服务器(即" server2")中" root"用户的登录凭据

登录凭证

如果一切正常,我们将使用Windows服务器连接到远程Linux服务器。
我们可以在"导航窗格"中验证路径。
默认情况下,我们连接到root用户的主文件夹

在Windows和Linux之间通过SSH传输文件

如何在Windows中使用SSHFS连接到其他文件夹?

在Windows SSHFS中,默认情况下我们连接到用户的主目录,因此我们必须使用导航符号提供绝对路径,即转到/shared目录,而在Windows上通过SSH传输文件的路径将是//sshfs/[email protected]. .43.10 /../shared

如果我们注意,我首先使用../更改了当前目录,然后使用了/shared目录的路径。
希望我们理解这一点。

提供不同的远程目录路径

现在,我们连接到目录"/shared",在" server2"上创建了三个虚拟文件。

在Linux和Windows之间通过SSH传输文件

有关Windows SSHFS的"高级用法"列表,请查看Github官方页面上的说明

断开远程文件系统

完成后,要断开网络驱动器的连接,请在" Windows资源管理器"中选择"此PC"。
查找映射驱动器,然后在驱动器上单击"右键"以获取选项列表。
选择"断开连接"以从Windows服务器中删除映射的驱动器。

从Windows断开映射的驱动器的连接