【问题标题】:How to set a password variable via a script for mounting a cifs share如何通过脚本设置密码变量以安装 cifs 共享
【发布时间】:2018-09-30 18:26:06
【问题描述】:

我有以下 bash 脚本可以在 NAS 驱动器中挂载几个共享目录:

sudo mount -t cifs //server/dir1 /mnt/nas/dir1 -o username=raf
sudo mount -t cifs //server/dir2 /mnt/nas/dir2 -o username=raf
sudo mount -t cifs //server/dir3 /mnt/nas/dir3 -o username=raf

这些挂载命令中的每一个都会要求输入密码。我想避免多次输入相同的密码。

来自mount.cifs手册,它说它可以使用变量PASSWD作为密码。

这就是我的 bash 技能失败的地方:如何更新脚本以询问和设置 PASSWD 变量,调用 mount 命令,最后取消设置 PASSWD 变量?

到目前为止,我可以在不回显屏幕的情况下阅读内容

read -s PASSWD

但我不确定如何将其合并到脚本中。

注 1:mount 参数 -o password=password 对我来说是不行的。我不想在文本文件中使用硬编码密码。

注 2:同样,我宁愿不使用 mount 参数 credentials=filename

【问题讨论】:

标签: bash nas cifs


【解决方案1】:

子进程很可能看不到该变量。您可以使用export 导出PASSWD

read -s PASSWD
export PASSWD

注意:这使它可用于所有子进程。出于您的目的,您需要的只是将变量仅导出到相关的子进程。

sudo PASSWD="$PASSWD" mount -t cifs //server/dir3 /mnt/nas/dir3 -o username=raf

【讨论】:

  • sudo 使事情复杂化;你不能将赋值放在mount 之前,并且sudo 不会(默认情况下)将自己的环境传递给它运行的程序。
  • @chepner:看来你可以。 @Vivek 在笔记中的建议对我来说非常有效:sudo PASSWD="$PASSWD" mount ...
  • 现在,最后,我需要unset PASSWD 吗?
  • 由于PASSWD="$PASSWD" 现在是命令行的一部分,它最终在所有用户的进程表中可见(例如ps 输出)。将变量定义移到sudo前面并使用-E选项继承它更安全,即PASSWD="$PASSWD" sudo -E mount ...
  • @GrishaLevit 感谢您指出这一点,这是一个重要的安全漏洞。但是,在执行ps -Aps -e 时,我只能看到主进程名称,而看不到PASSWD 变量定义。您到底使用了哪种语法才能看到它?
猜你喜欢
  • 2013-11-11
  • 2011-06-08
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
相关资源
最近更新 更多