Я выполняю сценарий оболочки для добавления цифровых отпечатков к 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.
Исходный сценарий (я думаю) правильный, за исключением порядка перенаправлений. Поменяйте их местами так, чтобы сначала 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