Назад | Перейти на главную страницу

ssh-keyscan stderr комментарий об успехе

Я запускаю сценарий оболочки для добавления отпечатков пальцев в 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.

Исходный сценарий (я думаю) правильный, за исключением порядка перенаправлений. Поменяйте их местами так, чтобы сначала stderr отправлялся на stdout, а затем перенаправлял stdout в файл (оставляя stderr без изменений). Это дает вам чистый выходной файл и все ошибки, хранящиеся в переменной.

Непроверено, но так должно работать.

Итак, первая строка скрипта должна быть ...

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

Возможно, я что-то упускаю, но меняю 2>&1 к 2>/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