【发布时间】:2016-11-16 05:22:30
【问题描述】:
我在我的应用程序中使用ssh 命令运行shell 脚本。使用的私钥是通过密码加密的,问题是 - 当被问到时我无法交互地传递它。ssh-agent 中没有添加密钥。我无法执行ssh-add my_key,因为假设密码是交互式传递的。它对终端通信有好处,但在应用程序内部使用不太好。
man page 说:
DISPLAY 和 SSH_ASKPASS
如果 ssh-add 需要密码,如果它是从终端运行的,它将从当前终端读取密码。 如果 ssh-add 没有与之关联的终端,但设置了 DISPLAY 和 SSH_ASKPASS,它将执行 SSH_ASKPASS 指定的程序并打开 X11 窗口以读取密码。这在以下情况下特别有用 从 .xsession 或相关脚本调用 ssh-add。 (请注意,在某些机器上可能需要重定向 来自 /dev/null 的输入来完成这项工作。)
当我执行SSH_ASKPASS=file_with_passphrase ssh-add my_key 时,我仍然要求输入密码,看起来 env var 在这种情况下被忽略了。我试图执行ssh -o BatchMode=yes 并且服务器只是拒绝了编码的密钥,因为没有人能够对其进行解码。
在ssh-agent 中使用它之前,我绝对可以手动解码 ssh 密钥,但看起来我即将从 SSH_ASKPASS 变量中获得我需要的东西,但我不知道如何让它工作。很高兴获得社区帮助。
【问题讨论】:
-
你说
When I execute SSH_ASKPASS=file_with_passphrase ssh-add my_key I still asked to type a passphrase- 但这并不是手册页所说的 - 该文件必须是可执行的并在标准输出上输出密码 - 所以它应该类似于echo "echo 'your_password'" > /tmp/unsafe; chmod +x /tmp/unsafe; SSH_ASKPASS=/tmp/unsafe ssh-add my_key。作为可以在SSH_ASKPASS中使用的示例,请参阅x11-ssh-askpass命令 - 您可以查看其手册页并运行它以查看其行为方式。 -
@IwanAucamp 哦,谢谢,误会了,制作了一个脚本而不是文件。顺便说一句,它没有帮助
标签: linux shell ssh ssh-keys ssh-agent