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