Добрый день, я весь день читал похожие темы, но, к сожалению, не нашел ответа, подходящего для моей ситуации. Итак, вот что я пытаюсь сделать. У меня есть сценарий оболочки с довольно большим количеством функций, и одна из функций предполагает вызов ssh-agent:
sh_agent_run () {
case "$(pidof ssh-agent | wc -w)" in
0) echo "SSH agent is not running. Startting SSH agent."
eval `ssh-agent -s`
ssh-add ${ssh_key}
;;
1) echo "SSH agent is running. Nothing to do."
;;
*) echo "Too much instances of SSH agent is running. Stopping SSH agent instances and running just one"
while pidof ssh-agent; do
echo "Stopping ssh-agent..."
killall -9 ssh-agent
sleep 1
done
echo "Starting valid SSH agent instance"
eval `ssh-agent -s`
ssh-add ${ssh_key}
;;
esac
}
В выводе говорится:
[версии root @ centos] # ./ssh_tunnels.sh -sr Агент SSH не запущен. Запуск агента SSH. Идентификация добавлена: (путь к ключу ssh)
Но когда я пытаюсь подключиться к ssh-agent и проверить ключ с помощью команды ssh-add -L, он говорит:
[root @ centos versions] # ssh-add -l Не удалось открыть соединение с вашим агентом аутентификации.
Может ли кто-нибудь помочь мне настроить мою функцию, чтобы я мог встроить ее в свой скрипт и использовать? Очень важно не запускать ssh-agent через .bashrc, мне нужно настроить bale для управления ssh-agent через этот скрипт (запуск, остановка, статус и т. Д.)
заранее спасибо
Чтобы ваш скрипт работал, вам нужно будет запустить его с .
:
. ./ssh_tunnels.sh
В .
или source
команда сообщает bash (YMMV с другими оболочками) выполнить сценарий с использованием текущей оболочки, а не запускать новую копию bash для запуска сценария.
Это необходимо, потому что команда
eval `ssh-agent -s`
устанавливает переменные среды, которые позволяют всем другим программам ssh знать, как взаимодействовать с агентом. Переменные среды действительны только в той оболочке, в которой они установлены (и любые программы запускаются из этой оболочки). Они не передаются обратно в родительскую оболочку, поэтому, если вы не запустите команды в текущей оболочке с .
в SSH_AUTH_SOCK
и SSH_AGENT_PID
переменные будут потеряны при выходе из скрипта.
Рекомендую брелок от gentoo.
https://wiki.gentoo.org/wiki/Keychain
Также существует как RPM:
https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain
Он содержит инструмент cli и примеры того, как подключиться к среде оболочки.