7

我正在使用 paramiko,我已经生成了我的私钥并尝试了它,这很好。现在我正在使用基于 Django 的应用程序,我已经在数据库中复制了私钥。

我将我的私钥保存charField在 Django 模型中。我在以下代码中遇到问题:

host = "192.154.34.54"
username = "lovestone"
port = 25
pkey = "------" # I saved my key in this string
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, username=username, port=port, pkey=?)

在这种情况下我该怎么办?SSH.connect当我将它存储在数据库中时,我应该如何传递私钥string

更新

即使我不能使用 IO,即从数据库中获取密钥并将其写入文件,然后使用保存的文件对象并传入,from_private_key(cls, file_obj, password=None) enter code here因为这是基于 Web 的应用程序,它不是通用密钥。每个用户都有自己的私钥。

4

2 回答 2

11

如果您无法将私钥保存到文件中,这将是使用StringIO的主要原因: StringIO 接受一个字符串并将其转换为类似文件的对象,但没有任何内容写入文件系统。当您只有一个字符串时,它允许您传递类似文件的对象:即完全像这样的情况。

import paramiko, StringIO

key_string = "------" # I saved my key in this string
not_really_a_file = StringIO.StringIO(key_string)
private_key = paramiko.RSAKey.from_private_key(not_really_a_file)

not_really_a_file.close()

这对我有用,你应该能够连接到该对象:

client = paramiko.SSHClient()
client.set_missing_key_policy(paramiko.AutoAddPolicy())
client.connect(host="example.com", username="root", pkey=private_key)
于 2015-01-01T12:44:11.307 回答
4

您可以使用StringIO使用存储的私钥和PKey的类方法from_private_key创建类似文件的对象,因此您将创建PKey实例并将其传递给connect方法。

于 2012-08-16T21:12:18.327 回答