Как я могу узнать, было ли установлено соединение SSH с переадресацией агента или без нее?
Я пытаюсь сделать следующее:
ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something
и сравнить вывод, но я вижу только тонкие различия.
ssh-find-agent
скриптом для поиска и использования существующих ssh-агентов, очень удобно! В репо есть несколько примеров в README. Возможно, вы сможете определить, включен ли ssh-agent таким образом, вместе с проверкой файлов конфигурации SSH, а не смотреть на вывод SSH.Ответы:
Когда SSH агент вперед включен на клиенте (
ForwardAgent yes
на~/.ssh/config
) , и также включен на удаленном сервереAllowAgentForwarding yes
, при входе на удаленный сервер переменная средыSSH_AUTH_SOCK
должна существовать. Затем, если вы войдете на другой сервер (ваш открытый ключ должен находиться на этом третьем сервере), вам не нужно будет запрашивать пароль.Чтобы уточнить:
источник
ssh-add
то, что помогло мне. Я работал в течение нескольких месяцев, не зная об этом. Затем я переключил рабочие столы с Unity на LXDE, и переадресация ключей агента перестала работать.ssh-add
каждый раз, когда открываете новое окно консоли. Поэтому я добавил эту командную строку в конец~/.bash_profile
, и теперь переадресация агента аутентификации работает каждый раз прозрачно!ssh-agent
настроили правильно. См. Mah.everybody.org/docs/ssh"${SSH_AUTH_SOCK}"
это сокет, вы можете проверить это сif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Проверка среды
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
не имеет выхода.источник