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

时间:2010-11-12 13:24:06

标签: python ssh-keys

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

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

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

(顺便说一下,我不想使用密钥环和类似的东西)

修改

好的,我理解使用用户ssh密钥这样的东西是个坏主意。 相反,我现在只使用base64编码,如下所述: How does one encode and decode a string with Python for use in a URL? 当有人读我的python脚本时,当然不能保存。但它对我来说足够了,不必将密码保存为纯文本。

2 个答案:

答案 0 :(得分:5)

唯一值得做的就是存储只有用户可以阅读的文件。

您使用ssh密钥的论点似乎如下:

  1. 我需要存储密码,所以我会对其进行加密
  2. 如果我使用用户的ssh密钥进行加密,这将阻止有人解密密码,即使他们拥有我的脚本源,因为只有用户才能读取他们的ssh密钥。
  3. 如果您将加密密码存储在文件中,只有用户可以阅读,您可以获得与使用ssh密钥相同的好处,而无需费心阅读用户的ssh密钥。

    我同意不以纯文本格式存储密码以防止有人以root身份登录时有一些好处:

    cat secret-password
    

    获取密码但请记住,在Python脚本中找到以下内容的行很容易说:

    password = decrypt-password(data)
    

    并添加以下行:

    print "The user's password is",password
    

    os.fchown()之类的东西可以保护文件,就像创建具有正确权限的文件一样。

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

    如果您真的担心这一点,只需在每次运行脚本时提示用户输入密码。

答案 1 :(得分:2)

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

没有

  • 私钥本身可以受密码保护。
  • 读取用户的密钥是一种糟糕的形式。
  • 可以在不考虑您的脚本的情况下进行更改。

您似乎也在混淆您的术语。我假设您的意思是encodingdecoding时,您已使用hashingencryptingdecrypting

正如Dave Webb所指出的那样,你的前提是私钥文件对用户是只读的而不是自己加密的。您将从“受文件系统用户只读保护”到“受用户只读的不同文件保护”。