Обнаружение переадресации агента SSH

19

Как я могу узнать, было ли установлено соединение SSH с переадресацией агента или без нее?

Я пытаюсь сделать следующее:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

и сравнить вывод, но я вижу только тонкие различия.

shabunc
источник
1
Для справки, ознакомьтесь с этой хорошей статьей: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Это указывает на хорошее GitHub-репозиторий со ssh-find-agentскриптом для поиска и использования существующих ssh-агентов, очень удобно! В репо есть несколько примеров в README. Возможно, вы сможете определить, включен ли ssh-agent таким образом, вместе с проверкой файлов конфигурации SSH, а не смотреть на вывод SSH.
trusktr

Ответы:

21

Когда 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$
Torian
источник
1
Это ssh-addто, что помогло мне. Я работал в течение нескольких месяцев, не зная об этом. Затем я переключил рабочие столы с Unity на LXDE, и переадресация ключей агента перестала работать.
Марк Хадсон
@MarkHudson По какой-то причине при запуске LXDE вы должны запускаться ssh-addкаждый раз, когда открываете новое окно консоли. Поэтому я добавил эту командную строку в конец ~/.bash_profile, и теперь переадресация агента аутентификации работает каждый раз прозрачно!
Пол Бернал
@PaulBernal На самом деле вам не нужно этого делать, я полагаю, вы не ssh-agentнастроили правильно. См. Mah.everybody.org/docs/ssh
Майкл
1
m2c: файл в "${SSH_AUTH_SOCK}"это сокет, вы можете проверить это сif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop
4

Проверка среды 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не имеет выхода.

udondan
источник