如何将带有密码的 .ppk 密钥批量转换为 OpenSSH 密钥?

如何将带有密码的 .ppk 密钥批量转换为 OpenSSH 密钥?

我的问题与此有关如何在 Linux 下将 .ppk 密钥转换为 OpenSSH 密钥?但在这种情况下,.ppk 可以有一个关联的密码。

根据puttygen 的手册页“目前无法以批处理模式提供密码,...”

有没有办法在非交互模式下将带有密码的 .ppk 转换为 OpenSSH 密钥?

答案1

您正在阅读的手册页已过时。提供新旧密码的选项已于 2016 年添加到 PuTTYgen 0.68 版中。

  --old-passphrase file
        specify file containing old key passphrase
  --new-passphrase file
        specify file containing new key passphrase

2023 年不要使用 linux.die.net。它现在完全无人维护——有时手册页已经有几年的历史了,有时二十岁。使用 Linux 发行版维护的手册页档案,例如https://man.archlinux.org/或者https://manpages.debian.org/反而。

(当然,安装手册页在您的系统上将是最新的。有图形程序可以读取它们,例如 GNOME 的yelp。如果您发现在终端中阅读手册页不方便,也可以使用将手册页呈现为 HTML man -Thtml puttygen > /tmp/foo.html。)


替代方案:对于任何从 stdin 或 tty 接受基于行的输入的东西,您也可以使用expect它来“交互地”提供输入。也就是说,编写一个运行 puttygen 的 Expect 脚本-批处理模式并等待适当的提示。

例如,如果你被迫使用旧版本的 puttygen没有--old-passphrase选项,像这样的东西将能够转换单个文件(该脚本使用 Tcl 语法并添加了一些特定于 Expect 的命令):

#!/usr/bin/env expect
set infile [lindex $argv 0]
set passphrase [lindex $argv 1]
set outfile [string map {.ppk .key} $infile]
spawn puttygen <some options>
expect "Password:" { send $passphrase }
expect "some other prompt:" { send "something else" }

相关内容