Назад | Перейти на главную страницу

SSH от A до B к C, используя закрытый ключ на A

Это мой сценарий:

Как я могу использовать ключ на хосте A для входа на хост C? Это возможно? Я не боюсь.

(похоже, но отличается от этот вопрос)

РЕДАКТИРОВАТЬ

Что мне нужно, так это способ предоставить на лету (stdin или аналогичный) закрытый ключ для ssh-перехода в B, не касаясь файловой системы в B. Возможно ли это?

Если вы используете последнюю версию OpenSSH, вы можете просто ввести:

ssh -J B C

Если вы используете более старую версию без -J support вы можете использовать немного более сложный синтаксис:

ssh -o ProxyCommand='ssh -W %h:%p B' C

Если вам это нужно каждый раз, когда вы ssh от A до C, может быть полезно добавить запись в ваш .ssh/config файл выглядит так (в последних версиях):

Host C
   ProxyJump B

Или вот так (в более старых версиях):

Host C
   ProxyCommand ssh -W %h:%p B

Используя любое из вышеперечисленных, вы можете просто ввести ssh C чтобы открыть соединение. Это особенно полезно, когда вы используете ssh косвенно через один из многих инструментов, которые используют ssh для их транспорта. Не все эти инструменты предоставляют простой способ передать флаги командной строки в ssh команда.

Это довольно просто. Просто используйте переадресацию агента (опция -A в ssh).

Образец:

#On machine A use
ssh -A user@<machine_B>
#Then on machine B use
ssh -A user@<machine_C>

Нет необходимости копировать закрытые ключи повсюду. -A перенаправляет только любые запросы агента SSH на первую машину в цепочке, поэтому закрытый ключ на машине A может использоваться, пока вы не переключаете пользователей на промежуточных машинах.

Если вы измените своего пользователя на машине B (например, с su foo на пользователя foo), переадресация агента больше не будет работать, поскольку следующее соединение будет выполнено как пользователь foo с его собственными ключами.