AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1164740
Accepted
QF0
QF0
Asked: 2024-09-04 01:57:24 +0800 CST2024-09-04 01:57:24 +0800 CST 2024-09-04 01:57:24 +0800 CST

ssh-keygen 没有读取 stdin 来获取加密密码(或者:ssh-askpass 是什么?)

  • 772

我正在使用ssh-keygen(OpenSSH v8.9) 在无头服务器上自动生成密钥。如果不需要密码,这很简单,但如果确实需要密码,则变得困难。ssh-keygen生成新密钥时,在 stdin 上需要 3 项内容:y,因为密钥文件已经存在,以及所需的密码,重复两次。

经过一些简化,我这样做如下:

$ printf -v input "y\npassword\npassword\n"
$ echo -n "$input"
y
password
password
$ echo -n "$input" | ssh-keygen -t ed25519 -a100 -f tmpkey

当我最初这样做时,我得到了这个输出:

Generating public/private ed25519 key pair.
tmpkey already exists.
Overwrite (y/n)? ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory

密钥对已创建,但私钥未加密。因此,我ssh-askpass在装有 X 的测试系统上安装了ssh-keygen。现在运行时,我得到了一个 OpenSSH 身份验证弹出窗口,并且 stdin 现在被忽略了。显然,即使我想要,也无法在无头服务器上使用图形弹出窗口。

那么到底发生了什么?我可以说服ssh-keygen自动输入密码吗?如果不行,我是否可以用来openssl添加密码,甚至创建文件?我确实想从中获取 OpenSSH 格式的密钥 - 我已经使用 openssl 自动化了 PKCS#8。

编辑

我找到了(not )SSH_ASKPASS_REQUIRE的环境变量。如果我将其设置为“never”,它确实会停止弹出窗口,但现在只会读取 stdin 的第一行,并忽略接下来两行的密码。所以,它对我没有任何帮助。sshssh-keygenssh-askpassssh-keygen

ssh
  • 2 2 个回答
  • 59 Views

2 个回答

  • Voted
  1. Best Answer
    EML
    2024-09-07T20:23:13+08:002024-09-07T20:23:13+08:00

    您可以使用 PuTTYgen 生成密钥,正如 dave_thompson_085 在评论中指出的那样。剧透:您可能不想这样做,因为puttygen似乎对 OpenSSH 的支持不完整。

    这将为你获取一个 OpenSSH 私钥:

    prikey=$(echo "$password" | puttygen -q -t ed25519 -C '' -O private-openssh-new -o /dev/stdout --new-passphrase /dev/stdin)
    

    密码为stdin,密钥为stdout,因此您的 bash 历史记录或输出中没有任何记录ps。您现在可以通过以下方式获取公钥:

     tmppipe=$(mktemp -u)
     mkfifo -m 600 "$tmppipe"
     echo "$prikey" > "$tmppipe" &
     pubkey=$(echo "$password" | puttygen "$tmppipe" --old-passphrase /dev/stdin -O public-openssh)
    

    到目前为止,这比好得多ssh-keygen。然而,美中不足的是-a100。上述过程生成一个具有默认 16 个 KDF 轮次的密钥文件。

    文档puttygen(实际上是手册页;我认为没有书面文档)没有明确说明如何设置 KDF 轮数,但似乎可以使用 进行设置--ppk-param passes=$rounds。如果您正在生成 PuTTY PPK 文件,这似乎有效,但对于 OpenSSH 文件则无效。puttygen没有抱怨,但密钥文件仍然显示 16 轮,并且设置rounds一个大数字对解密密钥所需的时间没有影响。要查找文件中编码的轮数,请参阅 Gilles 的回答。

    除非我错过了手册页中的某些内容,否则这对于使用密码短语puttygen生成 OpenSSH 密钥来说毫无意义。我个人会使用,并希望在制作密钥时没有人看到。据我所知,您也不能使用它来更改密钥文件中的注释。ssh-keygenputtygen

    • 1
  2. Romeo Ninov
    2024-09-04T02:49:19+08:002024-09-04T02:49:19+08:00

    提供密码的方式是使用-N:

    echo y| ssh-keygen -t ed25519 -a100 -N "$input" -f tmpkey
    

    当然你应该input为变量提供像你这样的内容:

    input=password
    
    • 0

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve