现状
给出了以下/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_pass
中mount
,以便它可以通过标准输入自动读取并且不打开交互式提示?
答案1
看来,mount
via/etc/fstab
总是想从终端设备交互地读取密码,并且没有通过标准输入管道传输它的解决方案。
这是一个利用的解决方法GNOME 钥匙圈/secret-tool
和sudo
-S
通过 stdin 传递密码的选项。
- 将密码存储在密钥环中:
secret-tool store --label='share app credentials' share app
# then input your password
- 挂载共享
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
凭据被假定为等于远程共享服务器凭据。