Skip to content

毛俊的博客

SSHFS挂载远程服务器目录

sshfs1 min read

GNU/Linux系统中经常需要用到目录挂载,比如挂载U盘,移动硬盘等。本地目录挂载可以使用Linuxmount工具完成。有的时候我们希望能将远程服务器上的某个文件夹挂载到本地目录,比如tomcat下的webapps目录,这样如果需要更新war包,就不再通过ftp拷贝上传了,直接将本地war包拷贝到挂载的webapps目录即可。

这里将介绍使用sshfs挂载远程服务器上的目录到本地。使用sshfs走的是ssh协议,所以只需要在本机上安装对应的sshfs客户端即可。常见的sshfs有如下几类:

这里以Archlinux系统为例,pacman仓库已经提供了sshfs的二进制包,所以直接安装即可:

1$ pacman -S sshfs

安装后先在本地创建一个挂载点:

1sudo mkdir /mnt/webapps # 本机创建一个webapps的挂载目录

挂载目录可以指定任意位置

使用sshfs命令挂载远程目录:

1$ sshfs -o allow_other,transform_symlinks [email protected]:/home/user /etc/letsencrypt

参数说明:

  • allow_other:提供访问权限
  • transform_symlinks:挂载软链接

可能会出现的错误:

1fusermount3: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf

解决方法:在本机的文件/etc/fuse.conf中取消注释下面的内容:

1user_allow_other

如果没有则自行添加即可。

如果是使用账号密码登入远程服务器的则进行目录挂载的时候需要输入密码。如果想通过ssh密钥登入,需指定密钥的位置:

1$ sshfs -o allow_other,transform_symlinks -o IdentityFile=~/.ssh/id_rsa [email protected]:/home/user/webapps /mnt/webapps

IdentityFile:指定ssh密钥位置

通过创建挂载远程目录后,就可以像操作本地目录一样操作远程目录上的文件了。对挂载目录中文件的修改将直接同步给远程目录。

如果有多个目录需要挂载,重复以上挂载步骤即可。需要注意是,这种挂载仅是临时挂载点,如果本地或者远程机器关机或者重启则需要再次挂载生效。

如果需要设置永久挂载则需要编辑/etc/fstab文件,设置自动挂载文件系统:

1$ sudo vim /etc/fstab

添加以下内容:

1sshfs#[email protected]:/home/user/webapps /mnt/webapps

设置完永久挂载点后需要重启生效 最好不要在生产机器上设置永久挂载点,以免本地机器被入侵造成连带损失

设置完远程挂载点后,就可以通过在本地操作挂载目录:除了无法在挂载目录执行程序或使用脚本,其他增删改查操作就可以像本地目录一样操作。

一个典型用法是,如果您在VPS上托管网站,并且需要定期更改网站。在本地挂载文件系统允许您启动您希望编辑站点的任何代码编辑器,IDE或文本编辑器,您所做的任何更改将在本地计算机上生成后立即反映在虚拟服务器上。

类似地,在用于编码项目的测试环境在服务器上,它允许非常简易的代码修改,可以立即测试而无需在本地和远程修改代码。

通过远程目录挂载,我们就可以实现在本地直接通过IDE编辑远程服务器上的文件,实现本地修改,远程更新的效果。

挂载跳板机的服务器

sshfs通过跳板机挂载远程服务器,配置配置跳板机和需要跳板机登入的服务器。如下:

1Host jump
2 HostName xxx.xxx.xxx.xxx
3 User xxx
4 Port 22
5 IdentityFile ~/.ssh/id_rsa
6
7Host foo
8 HostName xxx.xxx.xxx.xxx
9 Port 22
10 User xxx
11 IdentityFile ~/.ssh/id_rsa
12 ProxyCommand ssh jump -W %h:%p

将上面的xxx替换成实际的服务器IP和用户名。 配置了上面的跳板机,服务器就是可以通过ssh foo连接了,配置中会已经配置使用跳板机的代理。

因为sshfs是基于SSH协议的,同理也可以通过以下的命令挂载远程的服务器目录了:

1$ sshfs foo:/app/test ~/test

将远程服务器中的/app/test目录挂载到本地家目录的test下。

如果需要卸载挂载点,则可以通过以下命令:

1$ sudo umount /mnt/webapps

或者下面的命令,两个命令都可以卸载挂载点。

1$ sudo fusermount -u /mnt/webapps

(完)

© 2020 by 毛俊的博客. All rights reserved.
Theme by LekoArts