Позволить только определенные ключи в передаче агента?

Ну, да можно сделать это, но у Вас будет некоторая базовая ОС, даже если это будет гипервизор без операционной системы. Если это будет гипервизор, то Вам будет нужен другой компьютер (выполняющий GUI) к получить доступ к VMs все же.

Таким образом, при попытке сделать это на единственной машине, необходимо найти самую маленькую ОС, которая все еще выполнит гипервизор. Или как duffbeer703, на который намекают, ожидайте, пока гипервизор уровня BIOS не выходит...

7
задан 20 March 2017 в 12:04
3 ответа

Мне не известны какие-либо агенты, которые позволяют избирательную пересылку ключей, как вы схематически изображали. Когда ключ пересылается на хост, он как будто хранится локально и может использоваться для аутентификации на любом хосте оттуда.

Глядя на ваш вопрос на другом уровне, у меня есть две идеи о том, что вы, возможно, пытаетесь сделать do:

  • Запретить кому-либо аутентифицироваться на определенных хостах без физического присутствия в определенном месте.

Если это ваша цель, вы не можете достичь ее с помощью управления ключами аутентификации. Вы должны контролировать доступ через архитектуру и ограничения хоста, чтобы ни один хост, к которому можно получить удаленный доступ, не мог получить доступ к «безопасному» хосту.

  • «Защитите» определенные ключи, чтобы они не были открыты.

Если это ваш цель, это непонимание того, как защитить ключи. Сами ключи никогда не пересылаются. Передается возможность доступа к ssh-агенту для аутентификации по ключу. Однако такая переадресация может быть использована только при наличии пересылки и только в том случае, если машина, на которую вы переадресовали своего агента, управляется ненадежным администратором (добровольно или путем компрометации). Таким образом, на вашей диаграмме, если вы успешно не войдете с машины B -> D и экспортируете пересылку из A -> B -> D, вы не рискуете раскрыть свои учетные данные.

1
ответ дан 2 December 2019 в 23:46

Если эта проблема возникает только при развертывании приложения с использованием различных частных репозиториев, для которых требуются разные ключи:

Вы можете вообще пропустить пересылку агента. Скопируйте файлы на машину, содержащую различные ключи, затем выполните синхронизацию клонированных репозиториев с сервером, на котором происходит развертывание.

Client A
    |
* private keys
* `git clone ...` private repos 
* /tmp/repos
      | 
      |  ------------> rsync/scp -----------> Server B

Вы можете автоматизировать процесс с помощью псевдонима, сценариев оболочки и т. Д. Capistrano даже имеет это встроенное. Это называется стратегия копирования: http://rubydoc.info/github/capistrano/capistrano/master/Capistrano/Deploy/Strategy/Copy

1
ответ дан 2 December 2019 в 23:46

Функция, подобная запрошенной, должна принадлежать ssh-клиенту.

Для ssh-agent было бы слишком сложно определить, когда он обменивается данными через пересылку, а когда - общение с локальным ssh-клиентом. Если позволить серверу применить ограничение, это будет недостатком безопасности. Таким образом, клиент ssh остается единственным местом, где такая функция может существовать.

Быстрый просмотр исходного кода openssh привел меня к функции client_request_agent в clientloop.c. Из того, что я там вижу, создается впечатление, что ssh-клиент просто пересылает необработанный поток байтов, не пытаясь понять, какие ключи используются. Это означает, что для добавления этой функции в клиент потребуются значительные усилия.

Еще одна связанная функция, который можно было бы добавить с меньшими затратами, можно было бы использовать два разных агента. Один агент может использоваться для аутентификации на сервере, в то время как другой агент может быть перенаправлен на сервер.

Обе будут полезными функциями, которые я бы тоже использовал, но, увы, похоже, не существует в openssh (пока).

2
ответ дан 2 December 2019 в 23:46

Теги

Похожие вопросы