сценарий оболочки для запуска ssh-agent

Добрый день, Я целый день читал похожие темы, но, к сожалению, не нашел ответа, подходящего для моей ситуации. Итак, вот что я пытаюсь сделать. У меня есть сценарий оболочки с довольно большим количеством функций, и одна из функций предполагает вызов 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 через этот сценарий (запуск, остановка, статус и т. Д.)

Заранее спасибо

0
задан 29 December 2016 в 18:34
2 ответа

Для того, чтобы ваш скрипт заработал, его нужно запустить с помощью .:

. ./ssh_tunnels.sh

Команда . или source сообщает bash (YMMV с другими shell'ами), чтобы выполнить скрипт с использованием текущего shell'а, а не запускать новую копию bash, чтобы запустить скрипт.

Это необходимо, потому что команда

eval `ssh-agent -s`

устанавливает переменные окружения, которые позволяют всем остальным программам ssh знать, как взаимодействовать с агентом. Переменные окружения действительны только в оболочке, в которой они установлены (и любые программы запускаются из этой оболочки). Они не передаются обратно в родительский shell, так что если вы не запустите команды в текущем shell'е с помощью . переменные SSH_AUTH_SOCK и SSH_AGENT_PID будут потеряны при выходе из скрипта.

.
4
ответ дан 4 December 2019 в 11:15

Я рекомендую связку ключей из gentoo.

https://wiki.gentoo.org/wiki/Keychain

Также существует RPM:

https://www.rpmfind.net/linux/rpm2html/search.php?query=keychain

Он дает клип-инструмент и примеры для привязки к окружению оболочки.

2
ответ дан 4 December 2019 в 11:15

Теги

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