如何在登录/启动时自动挂载远程目录

如何在登录/启动时自动挂载远程目录

每次启动时,我都会用来sshfs挂载远程目录。我正在考虑将这些简短命令放入我的 .bashrc 中,但这似乎不是正确的方式™。

sshfs登录时运行的正确方法是什么?

答案1

的确,.bashrc不对。当您打开运行交互式 shell 的终端(如果您的 shell 是 bash)时,会读取该文件。

您可以在启动时执行 sshfs 安装,但这仅在不需要任何交互式身份验证时才有效:在大多数设置中,这意味着无密码密钥。 (还有其他方法,但它们仅适用于受信任的网络内部,您通常已经拥有 NFS 之类的东西。)

  • 如果您是 root,则可以在中添加一个条目/etc/fstab。请注意,这将使用 root 来~/.ssh查找密钥和已知主机。

    example.com:/remote/path /mount/point fuse.sshfs idmap=user,uid=1234
    
  • 你可以放一个@reboot crontab 条目

    @reboot sshfs -o idmap=user example.com:/remote/path /mount/point
    

如果您需要输入密码以发送到远程服务器,则需要先登录并拥有可用的用户界面。如果您需要输入密码来解锁密钥,情况也是如此。

大多数窗口管理器和桌面环境都允许您在登录时运行自定义命令。您可以运行如下所示的代码片段(假设您的环境已经启动了 SSH 代理 - 如今大多数人都这样做):

SSH_ASKPASS=ssh-askpass ssh-add ~/.ssh/id_rsa
mount | grep ' /mount/point ' ||
sshfs -o idmap=user example.com:/remote/path /mount/point

mount | grep ' /mount/point ' ||检查文件系统是否已安装,以防您通过多种方式登录。或者,不使用代理:

mount | grep ' /mount/point ' ||
SSH_ASKPASS=ssh-askpass sshfs -o idmap=user example.com:/remote/path /mount/point

如果您没有该ssh-askpass程序,另一种方法是打开终端来进行安装:

xterm -e 'ssh-add ~/.ssh/id_rsa'
mount | grep ' /mount/point ' ||
sshfs -o idmap=user example.com:/remote/path /mount/point

对于文本模式登录,请输入ssh-add您的~/.profile.仅当 shell 是交互式时才运行它。

case $- in
  *i*)
    ssh-add ~/.ssh/id_rsa
    ;;
esac
sshfs -o idmap=user example.com:/remote/path /mount/point

答案2

如果您想在启动时挂载文件系统,则需要将它们放入您的/etc/fstab.这是 OpenBSD 文档中的一个示例。我定期对远程服务器上的 NFS 存储执行此操作。

10.0.0.1:/work /mnt nfs rw 0 0

这种格式效果会很好。你的IP然后是你要挂载的目录。然后将其安装在远程服务器上的位置。fstab是在安装时执行此操作的最佳方法。或者您可以有一个可以在启动时执行的小脚本。

答案3

对于这个用例,我可以轻松地使用afuse,一个FUSE基于 sshfs 的自动挂载器[1]

在发行版上您可以轻松使用afuse用户服务单元文件就像在另一个问题中发布的那样

您还可以(重新)生成由一个几行简单的 shell 脚本[2]源自~/.profile

[1]:afuse在大多数 Linux 发行版的包管理器中都可用。

[2]:这个链接脚本来自我的关于将此设置转变为systemd用户服务的问题

相关内容