Я хотел бы иметь возможность ssh на нескольких компьютерах, используя флаг -A на ssh, например: ssh -A user @ hostB ssh -A user @ hostC

Это прекрасно работает в сценариях, где у меня есть SSH-ключи, позволяющие мне перейти от моей машины (hostA) к hostB, а затем ключи, идущие от hostB к hostC. Но что, если я хочу иметь возможность перейти от A к C, но не разрешить обмен ключами от B к C? Есть ли способ, которым я могу передать ключ по каналу SSH, не сохраняя и не оставляя этот ключ на машине B?

1 ответ1

1

Есть ли способ, которым я могу передать ключ по каналу SSH, не сохраняя и не оставляя этот ключ на машине B?

Ключ никогда не покидает ваш локальный компьютер. Опция -A позволяет только клиентам на hostB и hostC отправлять запросы на подпись данных обратно вашему локальному ssh-агенту. (Аутентификация SSH работает с использованием вашей пары ключей для создания цифровых подписей.)

(Технически они могут отправить любую команду ssh-agent, включая "list keys" или "add new key". Тем не менее, нет команды для извлечения закрытого ключа или любой другой конфиденциальной информации.)


Однако, если hostB полностью ненадежен (и вы не хотите, чтобы он даже имел возможность отправлять запросы аутентификации), используйте другой подход: локально запустите 2-го клиента и перенаправьте протокол SSH через "канал" SSH. Таким образом, промежуточные хосты будут видеть только зашифрованный разговор.

Самый простой метод (в OpenSSH 7.3 и более поздних версиях) - это опция ProxyJump:

ssh -J user@hostB user@hostC

Другие варианты:-o ProxyCommand="ssh -W %h:%p user@hostB" или статические туннели TCP через -L .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .