代码之家  ›  专栏  ›  技术社区  ›  jas-

屏蔽用户输入和编码

  •  0
  • jas-  · 技术社区  · 12 年前

    我希望创建一个简单的bash别名,因为有大量的选项&切换此特定功能集所需的。这是背景信息,不是问题所在。

    执行有问题的命令需要一个密码短语(通常在多个位置),我希望尽量减少密码短语,同时为其他用户提供一些隐私。

    以下是别名示例。。。

    alias test="read -sp 'Enter passphrase: ' pass; gpg --batch --passphrase $pass --symmetric --cipher-algo aes256 -o file.ext.gpg file.ext"
    

    别名工作正常,提示用户输入密码短语并将其应用于解密过程。

    这就是问题所在: 如果我加密文件并输入密码短语(不使用上面示例中显示的read-sp-utlity),则加密的文件密码与使用“read”二进制来屏蔽输入的密码不同。

    如果我显示用read-sp捕获的$pass的内容,它会像我键入的那样显示,没有任何额外的行尾等。

    有人经历过吗?

    2 回复  |  直到 12 年前
        1
  •  3
  •   mvds    12 年前

    难道你不应该引用 $pass ?如果它包含空格等。此外,您需要逃离 $ 以使其在设置别名时不展开。

    因此:

    alias test="read -sp 'Enter pp: ' pass; gpg --passphrase \"\$pass\" --batch --symmetric --cipher-algo aes256 -o file.ext.gpg file.ext"
    

    除此之外,您可能还想使用 --passphrase-fd 这样密码短语就不会出现在 ps 输出:

    alias test="read -sp 'pp: ' pass; gpg --passphrase-fd 3 --etc-etc 3<<< \$pass"
    
        2
  •  0
  •   chepner    12 年前

    shell函数会更简单,因为您消除了一定程度的引用,并且在需要将函数推广到其他文件时允许使用参数。

    # There is already a standard command called 'test'; use a different name
    pass_encrypt () {
      in=$1
      out=$in.gpg
      read -rsp 'Enter passphrase: ' pass
      gpg --batch --passphrase-fd 3 --symmetric \
          --cipher-algo aes256 -o "$out" "$in" 3<<<$pass
    }
    

    (带有mvds的使用建议 --passphrase-fd )