每次启动时,我都会用来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
用户服务的问题。