Есть некий локальный сервис, который генерирует конфиги nginx. После этого конфиг нужно "залить" на сервер и далее выполнить reload чтобы изменения вступили в силу. И все бы просто, но руководство поставило жесткие требования по безопасности.
Аутентификация на сервер только по ключу, который должен иметь пароль.
А как и где мне указывать пароль от приватного ключа? Т.е. как я вижу - ключ должен быть добавлен в систему через ssh-add например, но тогда ни php ни Ansible не увидят этот ключ в своей сессии.
Подскажите, а как вообще решаются такие задачи? Ведь админы не руками же "разливают" конфиги.
Спасибо!
@wasiceF А вы чем деплой делаете? Если не ошибаюсь, тот же gitlab или teamcity поддерживают пароли на ssh ключи.
@zerox пока еще ничем, раньше деплой был настроен в php через ssh2_auth_pubkey_file и ssh2_scp_send
Все работало успешно до момента когда потребовалась парольная фраза. А у этих функий есть баг ( https://bugs.php.net/bug.php?id=58573 ) и нормально работать больше они не могут :(
@wasice тогда реализация будет зависеть от применяемого инструмента. Так то можно и башем деплоить, передавая парольную фразу прямо в команде через | tee
@wasice тогда реализация будет зависеть от применяемого инструмента. Так то можно и башем деплоить, передавая парольную фразу прямо в команде через | tee
А какой лучше использовать инструмент для этой цели с точки зрения администрирования?
Так то можно и башем деплоить, передавая парольную фразу прямо в команде через | tee
А как передать парольную фразу? Получается если какой-нибудь хакир проникнет на сервер, то рядом будут и ключи и тут же парольная фраза, не очень секурно. В идеале хочется добавить ключ в систему, ввести пароль от него и пусть софт далее подключается уже. И если даже ключ "уйдет" то без парольной фразы он не будет представлять никакой ценности! Ну как я это вижу, но как это делается в реальности - не знаю.
А какой лучше использовать инструмент для этой цели с точки зрения администрирования?
Самые известные и популярные это Jenkins, Gitlab, Teamcity. Я затрудняюсь сказать, какой лучше. Но, конечно, для такой задачи это все избыточно.
Заливать конфиг можно не только по ssh. Можно и по rsync с авторизацией па паролю. А на сервере, куда идет конфиг, можно в firewall настроить ограничение на подключение по ip. Это не менее безопасно, но более гибко и удобно.
Можно и по rsync с авторизацией па паролю.
Это все сводится к той же проблеме. И по ssh можно "заливать" по паролю.
можно в firewall настроить ограничение на подключение по ip
А вот это уже дельный совет. Спасибо! По всей видимости так и поступим.
Это все сводится к той же проблеме. И по ssh можно "заливать" по паролю.
Это немного другое. По ssh могут подключаться разные люди и сервисы и с разных ip. Тогда надо их всех разрешать и каждому правило делать. А если просто заливать конфиг по rsync, то это отдельный порт, для которого можно сделать разрешение отдельное только для того сервера, с которого заливается конфиг. А ssh останется как и был, доступен всем, если это необходимо. Так что тут разница принципиальная. С точки зрения безопасности, ограничение по ip надежнее, чем доступ отовсюду, но с паролем на сертификат.