Как лучше всего запустить ssh-agent с помощью Cygwin?

Как лучше всего запустить ssh-agent с помощью Cygwin?

Я хотел бы ssh-agentначать работу при запуске Cygwin, поскольку я часто использую ssh-пропуск.

Я попробовал добавить:

eval `ssh-agent.exe`

к моему .bashrc, но всякий раз, когда я Alt-F2открываю новое окно терминала, .bashrcзапускается и, следовательно, ssh-agentсоздаются новые , что нежелательно и мешает сквозной передаче.

Затем я попробовал переместить команду eval в .bash_profile, но это тоже приводит к той же проблеме — полагаю, каждое новое окно терминала считается новой оболочкой входа.

Третий вариант — использовать cygrunsrv, но я только что узнал о нем и не совсем понимаю, как его использовать для этой конкретной цели, и, что, возможно, еще важнее, как передавать SSH_AUTH_SOCKинформацию SSH_AGENT_PIDо том, где создается служба, в каждую новую создаваемую оболочку.

Приветствуются любые предложения о наилучшем способе достижения этого результата — когда выполняется один ssh-агент, ожидающий выполнения, и его информация немедленно становится доступной для использования в любой вновь открытой оболочке.

решение1

Вы можете поместить его в свой .bashrc, но перед тем, как запустить его снова, вы должны проверить, запущен ли он уже. Например, вы можете сделать

if [ -z "$SSH_AUTH_SOCK" ]; then
    (umask 077; ssh-agent > "$HOME/.ssh/environment")
    ssh-add
fi

как часть процесса.

Also, if the agent is not running, you could first test if that environment file exists and source it like

environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
    . "$environ" >/dev/null
fi

if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
    (umask 077; ssh-agent > "$environ")
    ssh-add
fi

Есть длинный ответ, подробно описывающий большую часть этогоздесьна сайте U&L.

Я делаю что-то подобное, но в environфайле должно быть указано текущее имя хоста, поскольку мой домашний каталог находится на сетевом ресурсе, а я хочу запустить агент на разных хостах одновременно.

И чтобы явно указать, как это отвечает на ваш вопрос о том, как передать SSH_AUTH_SOCKпеременную между процессами, вы сохраняете вывод ssh-agentв файле и снова передаете его в каждую оболочку.

Связанный контент