Разрешение SSH для использования ssh-agent в сценарии bash

Я работаю над разведкой для набора систем, которые берет на себя моя компания, и они используют другой метод аутентификации, чем мы. В частности, мы используем авторизацию AD и сервер перехода для доступа к системам, где они используют сочетание ключей, кодовых фраз и других для различных систем.

Для систем, использующих ключ SSH, я пытаюсь написать сценарий, который позволяет мне автоматизировать войдите в систему и запустите команду для получения данных. На моем ключе есть пароль, и поэтому я пытаюсь использовать ssh-agent, чтобы позволить моему сценарию аутентифицироваться в системах практически без ввода.

Пока кажется, что проблема в том, что когда я запускаю что-то вроде следующего, ssh-agent либо A.) Умирает и заканчивается перед моим циклом for, либо B.) печатает команды для переменных среды и не выполняет ' t втяните их в область видимости.

eval ssh-agent
ssh-add ~/.ssh/${USER}_mvc

for i in `cat ${HOSTLIST}`
do
     ssh -l ${USER} ${i} -t 'uname -r' 
     &>${OUTDIR}/${i}.keyauthcollector
done

Я знаю, что мне не хватает чего-то, что можно было бы вытащить в переменных, которые генерирует SSH-агент, но я не могу их найти и, конечно же, все скрипты, которые я нахожу при поиске в google сценариев SSH-агента help хотят, чтобы ssh-agent запускался для вашего текущего сеанса, а не скрипт.

0
задан 14 September 2018 в 23:50
3 ответа

На странице для ssh-agent объясняется, чего не хватало:

Есть два основных способа настроить агент:

Первый - это то, что агент запускает новую подкоманду, в которую экспортируются некоторые переменные среды, например ssh-agent xterm & .

Во-вторых, агент печатает необходимые команды оболочки (sh (1) или csh ( 1) может быть сгенерирован синтаксис), который может быть оценен в вызывающей оболочке, например eval ssh-agent -s для оболочек типа Борна, таких как sh (1) или ksh (1) и eval ssh-agent -c для csh (1) и производных.

Первым вариантом будет удаление eval ssh-agent и вызов ssh-agent your-script вместо этого. Второй вариант - добавить отсутствующий $ ( ... ) для захвата вывода ssh-agent в качестве входных данных для eval, как описано в ] Ответ Ральфа Фридла .

1
ответ дан 4 December 2019 в 13:24

Я бы также порекомендовал запустить ssh-agent извне сценария, чтобы ваш сценарий работал без парольной фразы.

Но если вы хотите запустите агент для вашего сценария, способ сделать это

eval $(ssh-agent)

После этого вы можете добавить ключи к агенту и использовать его для входа в систему.

1
ответ дан 4 December 2019 в 13:24

После некоторой проверки и перепроверки я, кажется, нашел решение, но я все еще заинтересован в том, чтобы сделать эту работу в сценарии. Мне удалось заставить скрипт работать, развернув ssh-agent и ssh-add перед запуском моего скрипта и удалив все упоминания о командах, связанных с ssh-agent (в частности, строки 1 и 2 в моем примере). SSH использует переменные агента, установленные мной вне сценария, и успешно аутентифицируется с помощью ключа.

Обратная сторона: я до сих пор не знаю, как заставить его создать сеанс ssh-agent в сценарии оболочки и продолжать использовать этот сеанс агента с циклом for.

0
ответ дан 4 December 2019 в 13:24

Теги

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