问题
I am working with paramiko, I have generated my private key and tried it which was fine. Now I am working with Django based application where I have already copied the private key in database.
I saved my private key in charField
in Django model. I am facing a problem in the following code:
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=?)
What should I do in this case? How should I pass the private key in SSH.connect
while I stored it in string
in database?
Updated
Even i can't use the IO i.e. fetch the key from database and write it to a file and then use the saved file object and pass into from_private_key(cls, file_obj, password=None)
enter code here
because this is web based application and it is not a generic key. Every user have it's own private key.
回答1:
if you cannot save the private keys to files, that would be the the main reason to use StringIO: StringIO takes a string and turns it into a file-like object, but nothing is written to the file system. It allows you to pass in file-like objects when all you have is a string: i.e. exactly cases like this.
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()
That works for me, and you should be able to connect with that object:
client = paramiko.SSHClient()
client.set_missing_key_policy(paramiko.AutoAddPolicy())
client.connect(host="example.com", username="root", pkey=private_key)
回答2:
You can use StringIO for creating file-like object with your stored private key and PKey's class method from_private_key, so you will create PKey instance and you can pass it to connect method.
来源:https://stackoverflow.com/questions/11994139/how-to-include-the-private-key-in-paramiko-after-fetching-from-string