Linux

將 afuse 使用者級自動掛載程序與 sshfs 集成為從本地使用者登錄產生的 systemd 服務

  • April 26, 2020

2020 年編輯:幾年來,我一直在使用下面發布的 systemd-answer,對此我感到非常滿意。

為了方便使用遠端文件,我設置afusesshfs.bashrc本地使用者執行。它可以工作,在 bash init 之後,所有遠端樹~/.ssh/config/都按需安裝在 下~/scp/,並具有正確的訪問權限/限制。

這目前在(一個文件,來自).bashrc

exists(){ [[ ${1:0:1} == "/" ]] && { test -f $1 || test -d $1; } \
         || command -v $1 >/dev/null 2>&1;                        }

# Run an afuse process as daemon
if pgrep -u $USER -f "afuse.*$USER/scp" >/dev/null ; then
 echo "afuse/sshfs already running"
else
 exists afuse && exists sshfs && exists $HOME/scp \
 && export TAfuseX=$(mktemp --suffix=__afuse) && chmod u+x "$TAfuseX" \
 && echo -e "#!/bin/sh\ngrep '^Host ..' ~/.ssh/co* |colrm 1 5" > $TAfuseX \
 && echo "running afuse/sshfs with nohup" \
 && nohup afuse -o mount_template="sshfs %r:/ %m" \
                -o unmount_template="fusermount -u -z %m" \
                -o populate_root_command=$TAfuseX \
                ~/scp 2>&1 > ~/afuse.log
fi

(上面已經包含了來自@sato-katsura 的有用提示)

以上確保,它通常執行到機器關閉。它獨立於 X 停止/啟動。如果發生 afuse 崩潰(我從未觀察到),下一個 shell 會重新生成它。

您是否看到任何有用的優化、陷阱或其他提示,甚至在將其遷移到systemd. 您如何將其包裝到 systemd 使用者單元中?

幾年來我一直在使用這個systemd使用者服務單元定義文件:afuse.service

[Unit]
Description="SSHFS via Afuse automounter"
AssertPathExists=%h/scp/
AssertFileIsExecutable=/usr/bin/afuse
AssertFileIsExecutable=/usr/bin/sshfs

[Service]
Type=forking
WorkingDirectory=%h/scp
ExecStart=/usr/bin/afuse \
   -o fsname=AutoSCP \
   -o timeout=300 \
   -o auto_unmount \
   -o flushwrites \
   -o mount_template="sshfs -o ServerAliveInterval=10 -o reconnect %%r:/ %%m" \
   -o unmount_template="fusermount -u -z %%m" .
Restart=always
PrivateTmp=true
#NoNewPrivileges=true  <- That option breaks this unit, why?

[Install]
WantedBy=default.target

在以下位置創建afuse.service具有上述內容的文件:

  • ~/.config/systemd/user/如果只為您安裝
  • /etc/systemd/user/如果為所有本地使用者安裝

安裝此服務:

mkdir ~/scp  # Or Home Directories of all existing users + /etc/skel/ 
systemctl --user daemon-reload   # If root, then omit '--user'
# If enabling only for the current user:
systemctl --user enable afuse.service
# If enabling for all users, execute as root:
# systemctl --user --global enable service
systemctl --user start afuse.service

如果需要,您可以將 SSH-AGENT 配置為將套接字不在 中/tmp/...,而是在 下的某個位置~,那麼該服務應該能夠使用代理。(如果有需求,我也可以為此添加確切的步驟,@dirdi)

引用自:https://unix.stackexchange.com/questions/294965