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 erroring после того, как тот же хост использовался дважды из-за a ssh-keygen -R example.com команда работала вперед для обеспечения дублирования.

Я не мог выяснить способ отключить это комментарий stderr.

1
задан 13 October 2014 в 19:02
2 ответа

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

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

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

status=$(ssh-keyscan -T 5 $remotehost 2>&1 >> ~/.ssh/known_hosts )
1
ответ дан 4 December 2019 в 00:17

Мне здесь что-то не хватает, но изменение 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
0
ответ дан 4 December 2019 в 00:17

Теги

Похожие вопросы