Я знаю, что ssh-add
является «внешним интерфейсом» ssh-agent
.
Но ssh-agent
на моем компьютере уже запущен (я смог найти его в top
).Когда я набираю ssh-add
, он сказал "Не удалось открыть соединение с вашим агентом аутентификации".
Как ssh-add
в деталях связывается с ssh-agent
?
Моя ситуация
#! /bin/sh
# hello.sh
eval $(ssh-agent -s)
ssh-add
Тогда,
bash ./hello.sh
когда я набираю
ssh-add some-new-key
в терминале,
выводится это сообщение об ошибке
Результатом ssh-agent -s
являются некоторые назначения переменных среды, что-то вроде SSH_AUTH_SOCK=blahblah; export SSH_AUTH_SOCK
и т. д. Когда вы запускаете eval $(ssh-agent -s)
, оболочка выполняет это как код, и эти переменные устанавливаются в этой оболочке. Переменные там содержат информацию, необходимую ssh-add
для связи с агентом, и они наследуются от оболочки до процесса ssh-add
.
Но здесь вы управляете им изнутри hello.sh
. Оболочка, выполняющая сценарий, является независимым процессом, отличным от верхней интерактивной оболочки, которая запустилась hello.sh
, и переменные не наследуются «вверх».
Вместо этого, если вы используете источник сценария с source hello.sh
или . hello.sh
, он запускается в той же оболочке ,и переменные назначаются правильно.
Однако, если вы используете несколько оболочек (несколько эмуляторов терминала, сеансы SSH, окна screen/tmux, что угодно ), вам действительно нужен только один ssh-agent
. Вам нужно будет где-то сохранить назначения переменных в файл и загрузить их, например, из. .bashrc
. Но я не знаю, что именно ты делаешь.