我的问题与此有关如何在 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" }