使用 python 将 .ppk 文件转换为带有临时文件的 .pem

使用 python 将 .ppk 文件转换为带有临时文件的 .pem

我需要创建一个可以将 .ppk 文件转换为 .pem 文件的 fastAPI 端点。此转换是必要的,因为我想建立与 SFTP 服务器的连接并下载一些文件。目前,我能够直接使用 .pem 文件连接和下载文件。但是,当我只有 .ppk 文件可用时,我不确定如何继续。

import paramiko
import tempfile
import subprocess
import shlex

use_host = 'testfile.random.com'
use_port = 22
use_username = 'tester123'
use_password = '1234567890'
use_ppk_path = '/home/ubuntu-test/Music/SFTP_Private_Key.ppk'

use_temp_pem_file = tempfile.NamedTemporaryFile(mode='w', delete=False, suffix=".pem")
use_pem_path = use_temp_pem_file.name
use_cmd = f'puttygen "{use_ppk_path}" -O private-openssh -o "{use_pem_path}" --old-passphrase "{use_password}"'

use_process = subprocess.Popen(
    use_cmd,
    shell=True,
    stdin=subprocess.PIPE
)
use_process.communicate(input=use_password.encode())
if use_process.returncode != 0:
    print(f"Error executing command: {use_cmd}")
    print(f"Command returned non-zero exit status: {use_process.returncode}")
    print(f"Error output-stderr:\n{use_process.stderr}")
    print(f"Error output-stdout:\n{use_process.stdout}")

with open(use_pem_path, 'r') as use_f:
    use_f.seek(0)
    use_file_contents = use_f.read()
    print('file_contents', use_file_contents)

use_ssh = paramiko.SSHClient()

use_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
private_key = paramiko.RSAKey.from_private_key_file(filename=use_pem_path)
use_ssh.connect(use_host, port=use_port, username=use_username, password=use_password, key_filename=private_key)
use_sftp = use_ssh.open_sftp()

错误:

use_f.read() 为空 private_key = paramiko.RSAKey.from_private_key_file(filename=use_pem_path) ----> paramiko.ssh_exception.SSHException: 不是有效的 RSA 私钥文件

相关内容