Вот обходной путь для автоматизации парольной фразы SSH.
Создайте однострочный сценарий, который выводит вашу парольную фразу на стандартный вывод, например:
echo 'echo MY_SSH_PASSWORD'> ~ / .print_ssh_password && chmod 700 ~ / .print_ssh_password
Важно: убедитесь, что вы копируете начальный пробел в , чтобы предотвратить сохранение пароля в истории .
И воспользуйтесь одним из следующих способов.
с использованием стандартного метода ввода:
cat ~ / .ssh / id_rsa | SSH_ASKPASS = ~ / .print_ssh_password ssh-add - подход
или именованный канал :
Создайте именованный канал (вы также можете попробовать ] подстановка процесса ):
mkfifo --mode 0600 ~ / .ssh_fifo
Запустите ssh-add
, указав программу, используемую для аутентификации:
кошка ~ / .ssh / id_rsa> ~ / .ssh_fifo | SSH_ASKPASS = ~ / .print_ssh_password ssh-add ~ / .ssh_fifo
См .: man ssh-add
, чтобы узнать больше о SSH_ASKPASS
.
Отвечая на ваш комментарий к вопросу :Вам не нужно $count
до фактического вычисления среднего значения. А пока достаточно иметь
total=$(( total + input ))
Это добавит то, что ввел пользователь, к промежуточному итогу.
Затем можно рассчитать среднее значение, как$(( total / count ))
(примечание, так как оболочка выполняет только целочисленную арифметику, это будет целое число, см. Как выполнять целочисленные и плавающие вычисления в bash или других языках/фреймворках? ").
Прочее:
Ваша переменная $notdone
установлена в строку true
, и вы используете ее в while [ $notdone ]
. Подобные тесты для строк без кавычек ненадежны, и ваше условие цикла while
лучше записать как
while [ "$notdone" = "true" ]
Вы также должны рассмотреть возможность заключения в кавычки всех других расширений переменных в своем коде, например
if [[ "$input" -ge "$middle" ]]; then
Это особенно важно в вашем цикле ввода, иначе вы сгенерируете синтаксическую ошибку, введя что-то с пробелом посередине.
Поскольку вы используете bash
,вышесказанное также может быть написано
if (( input >= middle )); then
У вас также нет способа выйти из основного цикла, и оба echo
в конце говорят: «Ваш ответ находится в верхней половине».