代码之家  ›  专栏  ›  技术社区  ›  Wolkenarchitekt

使用ssh密钥加密和解密密码

  •  4
  • Wolkenarchitekt  · 技术社区  · 14 年前

    我的python脚本(python 2.6,在Debian Linux上)要求用户输入密码,wich随后保存在users主目录中。

    因为我不想用纯文本保护密码,所以我想用某种方式加密它。所以我想也许我可以使用用户的(私有)ssh密钥来加密和解密保存在文件中的密码,这样只有访问私有ssh密钥的人才能解密保存的密码。

    为此使用专用ssh密钥是一个好主意吗?如何在python中使用密钥加密字符串?

    (顺便说一下,我不想用钥匙圈之类的东西)

    编辑

    好吧,我知道把用户ssh密钥用于类似的事情是个坏主意。 相反,我现在只使用base64编码,如下所述: How does one encode and decode a string with Python for use in a URL? 当然,当有人读到我的python脚本时,它不会保存。但对我来说已经足够了,不必将密码保存为纯文本。

    2 回复  |  直到 7 年前
        1
  •  5
  •   David Webb    14 年前

    唯一绝对值得做的是存储只有用户才能读取的文件。

    您使用ssh密钥的理由如下:

    1. 我需要储存一个密码,所以我会加密它
    2. 如果我使用用户的ssh密钥进行加密,这将防止有人解密密码,即使他们有我的脚本源,因为只有用户可以读取他们的ssh密钥。

    如果您将加密的密码存储在一个文件中,只有用户可以读取,那么您将获得与使用ssh密钥相同的好处,而不必费心读取用户ssh密钥。

    我同意不以纯文本存储密码有一些好处,可以防止有人以 root 只是做:

    cat secret-password
    

    要获得密码,但要记住,在Python脚本中很容易找到这样一行:

    password = decrypt-password(data)
    

    并添加以下行:

    print "The user's password is",password
    

    有点像 os.fchown() 这样做的诀窍是保护文件,就像在第一时间创建具有正确权限的文件一样。

    你可以 base64 encode 密码,因此它不是纯文本,但如果我们假设攻击者可以读取和编辑您的脚本,唯一能保护用户的是攻击者无法读取包含加密密码的文件。

    如果你真的很担心,只要在用户每次运行脚本时提示他们输入密码。

        2
  •  2
  •   MattH    14 年前

    Is it a good idea to use the private ssh key for this?

    不:

    • 私钥本身可能受密码保护。
    • 去读用户的密匙是不好的行为。
    • 它可以改变,而不考虑你的脚本。

    你似乎也在混淆你的术语。你用过 encoding , decoding hashing 我以为你是说 encrypting decrypting .

    正如Dave Webb指出的,您的前提是私钥文件对用户是只读的,而不是自己加密的。您将从“受文件系统用户只读保护”变为“受用户只读的其他文件保护”。