Добрый день, Я целый день читал похожие темы, но, к сожалению, не нашел ответа, подходящего для моей ситуации. Итак, вот что я пытаюсь сделать. У меня есть сценарий оболочки с довольно большим количеством функций, и одна из функций предполагает вызов 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 версии] # ssh-add -l Не удалось установить соединение с вашим агентом аутентификации.
Не мог бы кто-нибудь помочь мне настроить мою функцию, чтобы я мог встроить ее в свой сценарий и использовать? Очень важно не запускать ssh-agent через .bashrc, мне нужно настроить bale для управления ssh-agent через этот сценарий (запуск, остановка, статус и т. Д.)
Заранее спасибо
Для того, чтобы ваш скрипт заработал, его нужно запустить с помощью .
:
. ./ssh_tunnels.sh
Команда .
или source
сообщает bash (YMMV с другими shell'ами), чтобы выполнить скрипт с использованием текущего shell'а, а не запускать новую копию bash, чтобы запустить скрипт.
Это необходимо, потому что команда
eval `ssh-agent -s`
устанавливает переменные окружения, которые позволяют всем остальным программам ssh знать, как взаимодействовать с агентом. Переменные окружения действительны только в оболочке, в которой они установлены (и любые программы запускаются из этой оболочки). Они не передаются обратно в родительский shell, так что если вы не запустите команды в текущем shell'е с помощью .
переменные SSH_AUTH_SOCK
и SSH_AGENT_PID
будут потеряны при выходе из скрипта.
Я рекомендую связку ключей из gentoo.
https://wiki.gentoo.org/wiki/Keychain
Также существует RPM:
https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain
Он дает клип-инструмент и примеры для привязки к окружению оболочки.