![ssh-add 无提示](https://linux22.com/image/207162/ssh-add%20%E6%97%A0%E6%8F%90%E7%A4%BA.png)
我正在处理一些 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 中也有类似的东西。