У меня есть собственная сеть серверов Centos 7. Доступ к каждому из серверов возможен только через бастион SSH. Более того, все эти серверы используют SSSD для аутентификации ключей пользователей SSH в каталоге LDAP.
Поскольку ключи аутентифицируются в каталоге LDAP, стандартного authorized_keys
файл. Вместо стандартного authorized_keys
файл, двоичный /usr/bin/sss_ssh_authorizedkeys
направляет запрос к LDAP в sshd
отформатирован как authorized_keys
файл, но не как файл. Итак, ограничение пользователей определенными командами путем привязки ключей RSA к commands=" ... "
запись невозможна, насколько я знаю.
Пользователи SSH могут пройти аутентификацию через бастион на своих рабочих станциях, используя следующую команду:
ssh -A -l joe.user@directory.service joes.workstation.ip -o ProxyCommand="ssh -l joe.user@directory.service -q bastion.ip nc joes.workstation.ip %p"
К сожалению, они также могут подключиться по SSH к сеансу на сервере-бастионе, чего я бы не хотел, чтобы они могли это сделать.
Могу ли я использовать свои текущие инструменты - SSSD, SSHD, каталог LDAP - чтобы позволить пользователям SSH проходить через бастион, но не в бастион?
Версия sssd
который позволяет вам устанавливать конфигурации для каждой группы, все еще находился в разработке, когда я столкнулся с этой проблемой.
В итоге я добавил ForceCommand
вход в мой sshd_config
под Match
директива, а также AcceptEnv
директива:
Match Group thisGroup@directory.service
AcceptEnv SomeVariable
AcceptEnv SomeOtherVariable
ForceCommand /path/to/some/script/I/wrote
Затем в сценарии оболочки я использую переменные, переданные ssh-клиентом, для выполнения некоторых действий.
Например, если клиент назвал это:
$ SomeVariable=foo ssh -i path/to/key -l joe@directory.service -o SendEnv=SomeVariable bastion.server
У скрипта будет доступ к переменной окружения SomeVariable
; получить к нему доступ, используя любой язык, который вам нравится, используя его для выполнения определенных действий.
Убедитесь, что ваш сценарий не завершает сеанс оболочки на бастионе.