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

标签 python django ssh paramiko ssh-keys

我正在使用 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,即从数据库中获取 key 并将其写入文件,然后使用保存的文件对象并传递给 from_private_key(cls, file_obj, password=None) 在此处输入代码,因为这是基于 Web 的应用程序,它不是通用 key 。每个用户都有自己的私钥。

最佳答案

如果您不能将私钥保存到文件中,那将是使用 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)

关于python - 从字符串中获取后如何在paramiko中包含私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994139/

相关文章:

使用 mrjob subprocess.CalledProcessError 的 Python hadoop mapreduce 作业

Python 整数意外结果

python - 加速 Redis 服务器输入

python - 列表仅存储最后一次迭代

Django:输出 JSON,而不是 OrderedDict

django - 预检请求不允许重定向

python - Json 循环的列表索引超出范围错误

linux - 备选方案——配置 java bash 脚本

linux - 显示 Linux 启动时运行的 bash 脚本中的内容

ssh - Google Compute Engine - SSH "Connection refused"故障排除