В текущей инфраструктуре существует docker-контейнер с gitlab, к которому надо прокинуть ssh-доступ из машины-хоста, т.е. предполагается примерно такое взаимодействие:
ssh root@host: обычный вход
ssh git@host: прием произвольного сертификата, затем проксирование подключения к git@localhost:10022 с тем сертификатом, с которым обратился клиент. Для клиента это должно выглядеть как обычное подключение.
Как организовать подобную архитектуру?
Ответ
Представленный метод не совсем соответствует вашим требованиям, но другим способом пробросить ключ, по-видимому, нельзя. Подключение будет перенаправлено на второй сервис, аутентификация на нем пройдет автоматически по тому же ключу, но перед подключением пользователю придется произвести дополнительные действия.
На стороне сервера
В файле /etc/ssh/sshd_config добавляем следующие строки, которые осуществляют немедленное переподключение ко второму ssh-сервису сразу после логина пользователя git (на других пользователей не действует):
Match User git
ForceCommand ssh git@localhost -p 10022
На сервере host должен существовать пользователь git с заполненным ~/.ssh/authorized_keys
На стороне пользователя
Необходимо перед подключением у пользователя запустить программу ssh-agent (командой eval `ssh-agent`) и добавить в нее ключ командой ssh-add. Затем пользователь подключается к вашему серверу командой
ssh -A username@host
Параметр -А включает проброс ключа, username - это root или git в вашем случае. Пока ssh-agent висит в памяти, проброс будет работать. Проброс на второй сервис выполнится прозрачно и незаметно для пользователя.
Также можно поправить конфиг /etc/ssh/ssh_config у пользователя, чтобы каждый раз не указывать ключ -A
Host *
ForwardAgent yes
Комментариев нет:
Отправить комментарий