7

私はparamikoを使用していますが、秘密鍵を生成して試してみましたが、問題ありませんでした。現在、データベースに秘密鍵をすでにコピーしているDjangoベースのアプリケーションを使用しています。

秘密鍵をcharFieldDjangoモデルに保存しました。次のコードで問題が発生しています。

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 に答える