有什么技巧可以让 sshfs 仅在写入时进行身份验证?

有什么技巧可以让 sshfs 仅在写入时进行身份验证?

似乎有一个技巧可以创建只读 sshfs 登录,其只读属性由远程文件强制执行~/.ssh/authorized_keys

首先创建一个~/.ssh/ro-sftp-server运行的程序sftp-server -R,无论传递了什么其他选项。接下来,像往常一样在远程文件中设置受限的 ssh 密钥,~/.ssh/authorized_keys但要添加命令限制:

no-X11-forwarding,no-agent-forwarding,no-pty,command= “~/.ssh/ro-sftp-server” ssh-rsa ...

最后,通过调用来挂载目录sshfs

sshfs -o ssh_command="ssh -i ~/.ssh/ro_key" \
      -o sftp_server="~/.ssh/ro-sftp-server" \
      -o idmap=mrmeow -o ro \
      [email protected]:. ~/www/

太棒了!现在我如何才能允许写入但只在要求输入密码后才允许写入?

我当然可以使用受密码保护但不受限制的密钥根据需要autofs安装第二个读写卷。sshfs

我最终需要 unionfs、mhddfs 或类似程序来使第二个目录出现在第一个目录上,但显然我真的需要把它们都安装好。:(

关于如何实现“写入时提示输入密码”功能,您有什么想法吗?

答案1

Fuse 无法在终端上向您提供密码提示,因为它无法访问它。您可能能够让 Fuse 猜测您的 X 显示器并在弹出 GUI 密码提示时阻止 I/O。某些桌面环境 (Gnome/KDE) 提供用于解锁密钥的钱包功能;它们可能是一个值得连接的东西。

但为了简单起见,我可以建议一种替代方案。也许您可以在工作流程中的某个地方检查是否需要写入功能,然后使用脚本调出提示。

例如,如果你使用 Vim,你可以在写入文件之前进行检查:

autocmd BufWritePre *.c                         \
    let targetfile = expand('%')              | \
    if !filewritable(targetfile)              | \
        exec "!~/bin/prompt_remount_foo_rw"   | \
    end

或者在幻想中的 Coffeescript 构建过程中,你可以在写入错误后采取相应的措施:

buildProcess.on "error", (e) ->
    if e.writeError
        prompt_remount_foo_rw().then(retryBuild)

要在没有 X 的单个终端中获得提示,需要您用来进行写入的任何软件的支持。

相关内容