【问题标题】:How to use encrypted and decrypted passwords in shell script如何在 shell 脚本中使用加密和解密的密码
【发布时间】:2018-07-31 15:13:52
【问题描述】:

我正在编写一个执行需要密码的命令的 shell 脚本。我无法在脚本中以纯文本形式输入密码。我阅读了有关 openssl 加密解密机制的信息,但是为了再次加密文件,我需要一个密码,我又无法将其放入脚本中。我不知道让脚本使用安全密码执行命令的最佳方法是什么。

【问题讨论】:

  • 如果脚本包含需要找出密码的信息,那么它还包含查看脚本的人需要找出密码的信息。除非有某种方法可以让正在运行的脚本访问阅读它的人无法获得的信息,否则我认为没有办法做你想做的事。
  • 你能再具体一点吗?是否所有用户都需要能够运行脚本?为什么命令需要密码?如果是ssh,则可以通过要求用户进行公钥认证来避免需要;如果是sudo,请查看编辑您的/etc/sudoers 等。作为最后的手段,您可以安排脚本从每个用户提供的文件(例如$HOME/.secret/myapp)中读取密码,如果您“感觉不错,你甚至可以检查一下别人看不懂。
  • 这不适用于用户身份验证。我需要执行一个以密码为参数的脚本。所以我的脚本需要执行另一个以密码作为命令行参数的脚本
  • "...它将密码作为命令行参数。" -- 这是一个非常糟糕的主意系统的所有用户都可以看到命令行上的密码,通过查看进程列表(ps 或 @987654327 @ 会做)。

标签: bash shell


【解决方案1】:

在阅读了Using OpenSSL to encrypt messages and files on Linux 之后,以下方法可能对您有用。

假设您为您的机器生成了私钥和公钥

openssl genrsa -out passwordPrivKey.pem 2048
openssl rsa -in passwordPrivKey.pem -out passwordPubKey.pem -outform PEM -pubout

OpenSSL 可用于加密和解密密码。提供一个脚本存根来演示如何使用该命令。

#!/bin/bash
echo -n "password" > PASSWORD.plain
# To encrypt
openssl rsautl -encrypt -inkey ./passwordPrivKey.pem -pubin -in PASSWORD.plain -out PASSWORD.dat
# To decrypt
DECRYPTED=$(openssl rsautl -decrypt -inkey ./passwordPubKey.pem -in PASSWORD.dat)
echo $DECRYPTED

在以后需要密码未加密的机器上,只会存储PASSWORD.datpasswordPubKey.pem

您可能还对Hiding Password in Shell ScriptsPassword encryption and decryptionHow does OpenSSL decrypt a password 感兴趣。

【讨论】:

  • 你混淆了一件事:加密是用公钥完成的,解密是用私钥完成的。所以只需更改引用的文件。其他一切正常。
  • 哦,还有一个。要将密码存储在纯文件中,请使用“echo -n”,否则换行符将成为密码的一部分。
【解决方案2】:

试试 openssl。它是 UNIX 上可用的命令,它可以为您散列密码。

https://www.openssl.org/docs/man1.0.2/apps/openssl.html

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • Hash 将创建一个哈希密码,但我可以在执行命令时使用它吗?例如:./test.sh -p "myhashedpassword"
【解决方案3】:

这取决于您从哪里执行该脚本。如果它是一个持续集成工具,应该有办法定义一个系统变量,在你的脚本中可见。

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 2020-08-11
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多