我正在研究一些外壳,我遇到了以下行:
cat /ssh/sshkey | tr -d '\r' | ssh-add -
此代码获取密钥并将其添加到代理。这适用于其当前环境,但是当我在另一个 VM 上尝试时,我得到以下信息:Error loading key "(stdin)": invalid format
ssh-add 期待一个带有密码的提示,我相信这是这个错误的原因,但这是在一个脚本中,应该没有密码也可以工作。
我错过了什么?
我正在研究一些外壳,我遇到了以下行:
cat /ssh/sshkey | tr -d '\r' | ssh-add -
此代码获取密钥并将其添加到代理。这适用于其当前环境,但是当我在另一个 VM 上尝试时,我得到以下信息:Error loading key "(stdin)": invalid format
ssh-add 期待一个带有密码的提示,我相信这是这个错误的原因,但这是在一个脚本中,应该没有密码也可以工作。
我错过了什么?
这很简单;ssh-add 使用 /dev/tty 而不是标准输入,因为它需要禁用输入密码的回显,因此您不能简单地重定向到它。
事实上,手册页指出:
因此,您需要运行附加到 pty 的 ssh-add,或者您可以使用 SSH_ASKPASS 发明一个笨拙的 hack(我不推荐它)。期望(1)(规范的庞然大物)或像 pdip 这样更简单的东西;zsh 有一个名为 zpty 的模块,也许 bash 中也有类似的东西。