Назад | Перейти на главную страницу

сценарий оболочки для запуска 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 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 и примеры того, как подключиться к среде оболочки.