使用 NAS 盒作为 24/7 文件服务器,我想使用 sshfs 从 Ubuntu 9.04 桌面连接到它。目前,我在桌面的 fstab 中有这一行:
sshfs#jldugger@storage:/mnt/HD_a2/ /mnt/storage fuse comment=sshfs,auto,users,exec,uid=1000,gid=1000,allow_other,reconnect,transform_symlinks,BatchMode=yes,fsname=sshfs#jldugger@storage/mnt/HD_a2/ 0 0
我可以确认它适用于 mount /mnt/storage
。我需要的是一些在启动时安装它的方法,但是在建立网络连接之后。
目前,Ubuntu 中的 Upstart 不生成网络事件。相反,它调用传统的 sysvinit。默认情况下 NetworkManager 已安装并运行;它不是向新贵发出网络事件,而是包含一个 run-parts 调度程序 (/etc/NetworkManager/dispatcher.d/),它本身仅依赖于 ifupdown 的 run-parts 调度程序 (/etc/network/*.d/)。特别是您关心 /etc/network/if-up.d/ 和 /etc/network/if-down.d/
首先设置一个未加密的 ssh 密钥对,这样就可以在没有提示的情况下挂载点。编写一个脚本,将其放入 /etc/network/if-up.d/ 并使其可执行。以下是在 UbuntuForums 上发现的,对我来说已经足够了:
如果您有 wifi 或其他不可靠的连接,请将以下内容放在 /etc/network/if-down.d/ 中:
Upstart是现在在 Ubuntu 中发布启动脚本或服务的首选方法,尽管编辑
/etc/rc.local
仍然有效。Upstart 允许您控制服务何时运行,确保它在启动网络连接后发生。也可以直接编辑 /etc/rc.Xd 中的符号链接(将 X 替换为您正在使用的运行级别)并添加诸如 S99mount 之类的名称以确保它在网络设置后运行。这将需要指向一个脚本文件,该文件挂载您请求的 sshfs。
_netdev 作为挂载选项应该可以解决这个问题,我相信
只是一个想法,但是如果您将其用作文件服务器,那么 NFS 或 Samba 可能是比 ssh 更好的解决方案。
如果您没有来自远程主机的证书并且必须使用登录名/密码,这是另一种解决方案。在此示例中,我使用 jldugger 使用的相同用户名和目录以避免增加混淆。
在主目录中创建一个包含密码的文件,并保护它:
编辑您的
/etc/rc.local
文件并在底部插入以下命令,但在“exit 0”之前: