将密码参数通过管道传输到 mount shell 命令

将密码参数通过管道传输到 mount shell 命令

现状

给出了以下/etc/fstab挂载点:

//server/app /home/user/server/app cifs noauto,user,vers=3.11  0 0
//server/code /home/user/server/code cifs noauto,user,vers=3.11  0 0

这些将以user特权方式挂载(无需sudo)。假设user已登录,password当前以交互方式提示 - 没有凭证文件,也没有硬编码密码/etc/fstab

此外:所有共享都具有相同的凭据user和相同的密码。

问题是什么?

假设我们想在启动时挂载所有共享。对于 share app

mount ~/server/app # `user` is active
# password interactively requested
Password for user@//server/app:  (press TAB for no echo)

问题是,我必须输入相同的密码才能全部共享,因为它不会被缓存。

我尝试过

# type password once and store it in process memory
echo "Enter password for mounts:"
read -s mount_pass
[[ -z "mount_pass" ]] && echo "Password empty, exiting" && exit

# mount all shares - how to feed every mount command with given password?
mount ~/server/app
mount ~/server/code

# My attempts
echo $mount_pass | mount ~/server/app
mount ~/server/app < <(echo $mount_pass)

(请原谅我的肤浅的 shell 知识)

有没有办法将存储在命令中的密码传递到命令$mount_passmount,以便它可以通过标准输入自动读取并且不打开交互式提示?

答案1

看来,mountvia/etc/fstab总是想从终端设备交互地读取密码,并且没有通过标准输入管道传输它的解决方案。

这是一个利用的解决方法GNOME 钥匙圈/secret-toolsudo -S通过 stdin 传递密码的选项。

  1. 将密码存储在密钥环中:
secret-tool store --label='share app credentials' share app
# then input your password 
  1. 挂载共享
secret-tool lookup share app | sudo -S mount -t cifs \
 -o username=bela,password=$(secret-tool lookup share app),vers=3.11,uid=bela \
 //share/app ~/local/share/app
# share := attribute, app := value

需要注意的是,我们必须使用mount提升的权限。本地sudo凭据被假定为等于远程共享服务器凭据。

相关内容