从字符串获取后如何将私钥包含在paramiko中?

问题描述 投票:0回答:2

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

我将私钥保存在 Django 模型中的

charField
中。我在以下代码中遇到问题:

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的应用程序,它不是通用密钥。每个用户都有自己的私钥。

python django ssh paramiko ssh-keys
2个回答
15
投票

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

from io import StringIO
from paramiko import SSHClient, RSAClient, AutoAddPolicy

# I have my key in this string
key_string = "------"

# now this acts like a file with the contents "------"
not_really_a_file = StringIO(key_string)

# so it can be used where a file is expected
private_key = RSAKey.from_private_key(not_really_a_file)

not_really_a_file.close()

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

client = SSHClient()
client.set_missing_key_policy(AutoAddPolicy())
client.connect(host="example.com", username="root", pkey=private_key)

4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.