我正在运行一个shell脚本来将指纹添加到known_hosts。
代码是这样的:
status=$(ssh-keyscan -T 5 $remotehost >> ~/.ssh/known_hosts 2>&1) if [[ $? != 0 ]]; then echo -n Error: "" echo "$status" exit 1 fi
结果是这样的:
ssh-keyscan -T 5 example.com # example.com SSH-2.0-OpenSSH_5.3 example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAA.....o9sgjFlqfli7ZQ==
直到最近,我还没有问题,但是到了晚期, ssh-keyscan在成功的情况下向stderr添加了评论,并用垃圾填充了我的主机文件。 由于ssh-keygen -R example.com命令提前运行以确保没有重复,最终导致主机文件在同一主机使用两次后出错。
我一直无法find一种方法来禁用该stderr评论。
原来的脚本(我认为)是正确的,除了redirect的顺序。 将它们交换,以便第一个stderr被发送到stdout,然后将stdoutredirect到该文件(保持stderr不变)。 这给你一个干净的输出文件和存储在variables中的任何错误。
未经testing,但这是它应该如何工作。
所以第一行脚本应该是…
status=$(ssh-keyscan -T 5 $remotehost 2>&1 >> ~/.ssh/known_hosts )
我可能会在这里丢失一些东西,但将2>&1更改为2>/dev/null应该确实可以解决这个问题。
我可能会做你想要的东西,因为写成你的$ status永远不会包含任何东西,因为你redirect到〜/ .ssh / known_hosts
ssh-keyscan -T 5 $remotehost >> ~/.ssh/known_hosts 2>~/.ssh/error.log if [[ $? != 0 ]]; then echo -n Error: "" cat ~/.ssh/error.log exit 1 fi