Есть ли способ, которым я могу передать ключ по каналу 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
.