Вы несколько ошибаетесь по поводу того, как работает переадресация агента:
Закрытые ключи никогда не отправляются никуда. Переадресация агента использует противоположный механизм: клиенты SSH, работающие в удаленной системе, будут отправлять запросы на подпись обратно в вашу локальную систему, где локальный gpg-agent выполняет операцию и отправляет результат обратно.
(Кроме того, невозможно извлечь закрытый ключ из вашей смарт-карты, поэтому даже ваш местный gpg-агент не имеет настоящего закрытого ключа.)
Не существует такого понятия, как "посредник". Единственным промежуточным программным обеспечением являются локальный клиент SSH и удаленный демон sshd. Удаленная система не запускает никаких ssh-агентов или gpg-агентов для обработки переадресации, и если они уже были запущены, они остаются полностью неиспользованными и не знают об этом соединении.
Когда вы находитесь дома и подключаетесь (например) из HOME в OFFICE с включенной переадресацией агента, вы должны увидеть $ SSH_AUTH_SOCK, указывающий на сокет, принадлежащий процессу sshd, который принял ваш логин, а не на какой-либо отдельный процесс агента. (Вы можете проверить с помощью sudo lsof $SSH_AUTH_SOCK
.)
Если ваша проверка показывает, что удаленная система фактически указала $ SSH_AUTH_SOCK на свой собственный процесс ssh-agent или gpg-agent, это проблема: либо сервер не принял запрос перенаправления агента, либо ваши сценарии входа в систему (~/.profile и т. д.) излишне перезаписывают переменную окружения.
Когда вы затем пытаетесь подключиться из OFFICE к еще одному серверу, клиент ssh в OFFICE отправляет запрос на подпись через этот сокет непосредственно вашему локальному агенту, в основном неотличимый от локального запроса. (Локальный агент видит только, что локальный клиент ssh делает этот запрос, поэтому у него нет возможности "не поддерживать" переадресацию агента.)
Если локальный агент отклоняет этот запрос, процесс устранения неполадок в основном такой же, как и при обычных прямых соединениях: если это gpg-agent, убедитесь, что у вас установлено значение $ GPG_TTY; gpg-connect-agent updatestartuptty /bye
если необходимо, перед установкой начального соединения и будьте осторожны, чтобы не использовать команды gpg с других терминалов.