Silence ssh-add

12

У меня есть cronjob, который выполняет некоторые задачи, и в начале скрипта он выполняет вызов ssh-add (он не запускается как пользователь с соответствующим ключом, поэтому он нуждается в добавлении, и в будущем он вполне может использовать ключ развертывания, определенный в управлении версиями). Это выглядит примерно так:

ssh-agent bash -c "ssh-add /home/tomjn/.ssh/id_rsa; etc... "

Я хочу заставить его замолчать, так как этот cronjob выполняется регулярно, и у меня в почтовом ящике много писем, которые совершенно бесполезны для меня, утверждая, что да, ключ был добавлен. Я хочу получать электронные письма только тогда, когда что-то идет не так, как, например, зависание удаленного соединения git pull и т. Д., Что происходит.

Итак, TLDR, я продолжаю видеть это:

Идентификация добавлена: /home/tomjn/.ssh/id_rsa (/home/tomjn/.ssh/id_rsa)

Как мне заткнуться?

Я пробовал такие вещи, как:

ssh-add /home/tomjn/.ssh/id_rsa > /dev/null

Но безрезультатно. Страница man не указывает на наличие --quietпараметра. Могу ли я сделать что-то еще, чтобы отключить вывод?

Том Дж Новелл
источник

Ответы:

18

Вывод ssh-addкоманды находится на STDERR. Вам нужно перенаправить STDERR в / dev / null для подавления вывода:

mtak@frisbee:~$ ssh-add .ssh/id_rsa 2>/dev/null
mtak@frisbee:~$ 

или, альтернативно, подавить весь вывод, завершив команду >/dev/null 2>&1

mtak
источник
2
Флаг молчания будет более точным, поскольку он позволит отключить нормальную работу, позволяя при этом обнаруживать ошибки (например, ключ не найден или не читается). Беглый взгляд на github.com/openssh/openssh-portable/blob/master/ssh-add.c подтверждает, что в исходном коде нет опций. Другими вариантами является специальная фильтрация «добавленного» сообщения, но в bash это обычно мешает обработке ошибок (если вам set -euнужна проверка работоспособности во время выполнения). Нет никаких намеков на то, что все это важно здесь, так что простого перенаправления stderr должно быть достаточно.
Стефан Гурихон
4
Теперь есть опция для этого на странице руководства. Кроме того, в коде, который вы связали, теперь есть упоминание этого флага в выводе справки . Флаг был добавлен в этот коммит. Однако, у меня OpenSSH_7.6p1на моем компьютере из homebrew (последний доступный) и этот флаг, кажется, не работает - -qопция доступна в справке, но она не меняет вывод ключа.
Остинхейман
1
-qна Kubuntu 18.04 тоже не работает.
Системович