Когда ssh агент вперед включен на клиенте (ForwardAgent yes
на ~/.ssh/config
) и также включен на удаленном сервере AllowAgentForwarding yes
, при входе к удаленному серверу переменной среды SSH_AUTH_SOCK
должен существовать. Затем, если Вы входите в другой сервер (Вы, открытый ключ должен находиться на этом третьем сервере), Вам нельзя предложить пароль.
Разъясниться:
home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
Проверка окружения для SSH_AUTH_SOCK
хороша для прямых ssh соединений.
Если вы используете прокси (proxy_command
), то у вас может возникнуть ситуация, которая выглядит так:
local
-> hostA
-> hostB
-> hostC
-> hostD
Если на всех этих хостах активна переадресация агентов, то SSH_AUTH_SOCK
будет установлен и "содержит" ваш ssh ключ от local
на всех хостах.
Теперь предположим, что переадресация агентов отключена на hostB
, но включена на hostC
. SSH_AUTH_SOCK
будет установлен на hostD
, но на самом деле он будет "пустым". Конечно, агент переадресуется, но только с hostC
на hostD
. Цепь разорвана.
Теперь, чтобы проверить, действительно ли ключ доступен на hostD
, вы можете просто позвонить ssh-add
. В любом случае он выйдет с кодом 1, но если ключ недоступен, он покажет это на stderr
:
Не смог открыть соединение с вашим агентом аутентификации.
Таким образом, вы можете проверить SSH_AUTH_SOCK
плюс убедиться, что ssh_add
не имеет выхода.
ssh-add
то, что добилось цели для меня. Я работал в течение многих месяцев, не зная об этом. Затем я переключил рабочие столы от Единицы до LXDE, и передача ключа агента прекратила работать. – Mark Hudson 27.09.2012, 02:04ssh-add
каждый раз Вы открываете новую консоль. Таким образом, я добавил ту командную строку в конец~/.bash_profile
, и теперь передача агента аутентификации работает каждый раз прозрачно! – Paul Bernal 20.02.2014, 18:28ssh-agent
настроенный правильно. Посмотрите mah.everybody.org/docs/ssh – Michael Mrozek♦ 20.02.2014, 19:37"${SSH_AUTH_SOCK}"
сокет, можно протестировать его сif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
– Boop 15.03.2018, 12:47