Я пытаюсь создать сценарий оболочки, который, помимо прочего, запускает ssh-agent и добавляет секретный ключ к агенту. Пример:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Проблема с этим заключается в том, что ssh-agent запускает другой экземпляр $ SHELL (в моем случае bash), и с точки зрения сценария он выполняет все, а ssh-add и все, что ниже, никогда не запускается.
Как я могу запустить ssh-agent из своего сценария оболочки и продолжать двигаться вниз по списку команд?
exit
сделали свое дело.Поместите следующее в начало вашего скрипта:
Ваш скрипт должен выглядеть так:
объяснение
Бэктики вокруг
ssh-agent
собирают свой вывод.eval
собирает этот вывод, объединяет его в одну команду и затем выполняет команду. Затем вы можете использовать,ssh-add
чтобы предоставить свои ключевые учетные данные.источник
eval $(ssh-agent)
bash -i
в конце сценария.Я склонен делать что-то подобное в сценариях, которые требуют агента.
По сути, первым делом скрипт проверяет, запущен ли агент. Если это не exec, используется для запуска нового процесса вместо сценария. Агент запускается, ключи добавляются, и, наконец, скрипт вызывается снова (см.
$0
).источник
.. "ssh-add ; $0 $*"
или.. "ssh-add ; $0 $@"
вместо этого, который может работать. Что не было бы идеально, но, безусловно, сработало бы во многих случаях. Лучшее решение почти всегда состоит в том, чтобы ваш агент работал в любом случае, в любом случае, это может быть полезно в неясных случаях.Я нашел это работает для меня.
Я создаю процесс ssh-agent, добавляю ключ, делаю то, что мне нужно, затем убиваю его. Не нужно проверять, работает ли он позже.
источник
В этом случае лучше использовать связку ключей
Debian / Ubuntu:
RHEL / Fedora / CentOS
Добавьте в ваш .bashrc следующее:
источник
Я обнаружил, что с помощью решения Zoredache ключ будет доступен для любой оболочки, которая использует тот же ssh-агент, что и оболочка, которая вызвала скрипт. Я хотел избежать этого в сценарии, который требовал root-доступа к удаленной машине по очевидным причинам безопасности.
Я обнаружил, что следующий сценарий работает в верхней части скрипта:
источник
Я попробовал и много, и решение, которое в итоге сработало, заменило мою фразу-пароль пустой строкой.
источник