Использовать определенный перенаправленный ключ от SSH-агента?

Допустим, у меня есть ключ для Github и другие ключи. Я добавил много ключей к моему агенту ssh (ssh-add -L возвращает много строк) на моем домашнем компьютере А. В моем .ssh/config Я установил, какой ключ использовать с каким хостом, например,

ssh -T -vvv git@github.com 2>&1 | grep Offering

дает

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

Как и ожидалось, предлагается только один ключ. Но затем ssh-ing к некоторому хосту B с ForwardAgent yes и повторяя ту же команду, я получаю

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

значит, он пробует все мои ключи. Это проблематично, поскольку перед возвратом серверов можно попробовать только ограниченное количество ключей. Too many authentication failures, Поэтому я попытался редактирование .ssh/config на хосте B включить

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

но тогда я не получаю никаких ключевых предложений, а скорее

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

что, по-моему, означает, что ключ не был найден (?) И, в конце концов, ключ находится на моем домашнем компьютере A, а не на хосте B, поэтому вопрос в том, как обратиться к нему на хосте B? Надеюсь, мне удалось объяснить вопрос.

2 ответа

Решение

Вы правильно поняли. Единственная часть, которую вам не хватает, это то, что файл, на который указывает IdentityFile должен существовать. Он не должен содержать закрытый ключ, достаточно иметь только открытый ключ.

На хосте B вы можете извлечь открытый ключ из агента, набрав ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pub а затем укажите на этот файл из ~/.ssh/config

Хороший ответ от @Kasperd, но учтите также, что если хост B скомпрометирован или если вы не доверяете всем тем, у кого есть привилегии root, вы все равно подвергаете все свои ключи злоупотреблению до тех пор, пока вы вошли в систему. на этом хосте.

Поэтому лучшим подходом может быть пересылка только тех ключей, которые вам нужны. Может быть попробовать ssh-agent-filter который находится в репозиториях Debian / Ubuntu или из github.

РЕДАКТИРОВАТЬ: я остановился на ssh-ident скорее, чем ssh-agent-filter для пересылки ключей выборочно, хотя это не так гладко, как можно надеяться.

Другие вопросы по тегам