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

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

Допустим, у меня есть ключ для Github вместе с другими ключами. Я добавил много ключей к своему ssh-агенту (ssh-add -L возвращает много строк) на моем домашнем компьютере A. В моем .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? Надеюсь, мне удалось объяснить вопрос.

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