ssh-keyscan stderr 评论成功

ssh-keyscan stderr 评论成功

我正在运行一个 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 中添加注释,并在我的 hosts 文件中填充垃圾。这最终导致 hosts 文件在两次使用同一个主机后出错,因为ssh-keygen -R example.com命令提前运行以确保没有重复。

我一直无法找到禁用该 stderr 注释的方法。

答案1

原始脚本(我认为)是正确的,除了重定向的顺序。交换它们,以便首先将 stderr 发送到 stdout,然后将 stdout 重定向到文件(保持 stderr 不变)。这样会为您提供一个干净的输出文件和存储在变量中的所有错误。

未经测试但它应该如此工作。

因此脚本的第一行应该是...

status=$(ssh-keyscan -T 5 $remotehost 2>&1 >> ~/.ssh/known_hosts )

答案2

我可能在这里遗漏了一些东西,但改变 2>&12>/dev/null肯定可以解决问题。


我可能会做你想做的事情,就像这样,正如你所写,你的 $status 永远不会包含任何内容,因为你将所有输出重定向到 ~/.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

相关内容