Задать вопрос

Кто может разъяснить магию ssh agent forwarding?

Постановка задачи:
Есть клиентская машина, на ней много ключей SSH, они загружены в ssh agent. Есть сервер, на котором sshd настроен на ограниченное количество попыток аутентификации. На клиентской машине эта проблема решается через явное указание нужного ключа в ~/.ssh/config .
С клиентской машины заходим по ssh на промежуточный хост с форвардингом агента. При попытке подключения к серверу с промежуточного хоста клиент ssh начинает перебор всех доступных ключей, исчерпывает попытки и терпит неудачу.
Но если на промежуточный хост сохранить публичный ключ из пары для доступа на сервер, а затем указать его при подключении:
ssh -i ~/.ssh/target_server_key.pub user@target_server

то подключение удаётся. Дебаг ( ключ -Tv ) показывает, что этот явно указанный ключ предложен первым:

debug1: Next authentication method: publickey
debug1: Offering public key: {...}.pub ED25519 SHA256:{...} explicit agent
debug1: Server accepts key: {...}.pub ED25519 SHA256:{...} explicit agent

но я не понимаю, почему это срабатывает - ведь я предложил публичный ключ, а не приватный?
  • Вопрос задан
  • 71 просмотр
Подписаться 2 Средний 2 комментария
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Так это буквально в документации написано


-i identity_file
[...] You can also specify a public key file to use the corresponding private key that is loaded in ssh-agent(1) when the private key file is not present locally.


https://man7.org/linux/man-pages/man1/ssh.1.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
Потому что PublicKeyAuthentication так и работает - вы предлагаете серверу публичный ключ, он же, проверяя соответствующий приватный ключ, допускает вас или не допускает
Про форвардинг
When the user uses an SSH client on the server, the client will try to contact the agent implemented by the server and the server then forwards the request to the client that originally contacted the server, which further forwards it to the local agent

Вы инициируете вышеописанную цепочку когда с сервера(выделенного жирным) ssh клиентом пытаетесь подключиться к другому серверу

Если форвардинг не работает - проверяйте:
To use agent forwarding, the ForwardAgent option must be set to yes on the client (see ssh_config) and the AllowAgentForwarding option must be set to yes on the server (see sshd_config)
Ну и запущен ли SSH агент на первоначальном клиенте и на первом сервере

А вообще - документация https://www.ssh.com/academy/ssh/agent
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы