ssh-add 无提示

ssh-add 无提示

我正在处理一些 shell,遇到了以下行: cat /ssh/sshkey | tr -d '\r' | ssh-add -

此代码获取密钥并将其添加到代理。这适用于当前环境,但是当我在另一个虚拟机上尝试它时,我得到以下信息:Error loading key "(stdin)": invalid format

ssh-add 期望出现带有密码的提示,我相信这就是此错误的原因,但这是在脚本中,应该在没有密码的情况下工作。

我缺少什么?

答案1

这很简单; ssh-add 使用 /dev/tty 而不是 stdin,因为它需要禁用输入密码的回显,因此您不能简单地重定向到它。

事实上,手册页指出:

如果任何文件需要密码,ssh-add 会要求用户提供密码。密码是从用户的 tty 读取的。

因此,您需要运行附加到 pty 的 ssh-add,或者您可以使用 SSH_ASKPASS 发明一个笨重的 hack(我不推荐它)。要么是expect(1)(规范的庞然大物),要么是像pdip这样简单的东西; zsh 有一个名为 zpty 的模块,也许 bash 中也有类似的东西。

相关内容