— sshfs — 1 min read
GNU/Linux
系统中经常需要用到目录挂载,比如挂载U盘,移动硬盘等。本地目录挂载可以使用Linux
的mount
工具完成。有的时候我们希望能将远程服务器上的某个文件夹挂载到本地目录,比如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
添加以下内容:
设置完永久挂载点后需要重启生效 最好不要在生产机器上设置永久挂载点,以免本地机器被入侵造成连带损失
设置完远程挂载点后,就可以通过在本地操作挂载目录:除了无法在挂载目录执行程序或使用脚本,其他增删改查操作就可以像本地目录一样操作。
一个典型用法是,如果您在VPS上托管网站,并且需要定期更改网站。在本地挂载文件系统允许您启动您希望编辑站点的任何代码编辑器,IDE或文本编辑器,您所做的任何更改将在本地计算机上生成后立即反映在虚拟服务器上。
类似地,在用于编码项目的测试环境在服务器上,它允许非常简易的代码修改,可以立即测试而无需在本地和远程修改代码。
通过远程目录挂载,我们就可以实现在本地直接通过IDE
编辑远程服务器上的文件,实现本地修改,远程更新的效果。
sshfs通过跳板机挂载远程服务器,配置配置跳板机和需要跳板机登入的服务器。如下:
1Host jump2 HostName xxx.xxx.xxx.xxx3 User xxx4 Port 225 IdentityFile ~/.ssh/id_rsa67Host foo8 HostName xxx.xxx.xxx.xxx9 Port 2210 User xxx11 IdentityFile ~/.ssh/id_rsa12 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
(完)