У меня есть N хостов, на которых я могу выполнить вход без пароля через ssh для пользователя root
.
Для этих машин мне нравится добавлять ssh-pub -key к авторизованным_ключам пользователя postgres
.
Цель: я хочу также войти в систему без пароля для пользователя postgres
.
AFAIK инструмент ssh-copy-id
здесь не помогает, так как я хочу, чтобы действие «добавить ssh-pub-key в postgres пользователя» было без пароля.
Как решить эту проблему?
Ну, если вы можете войти без пароля от имени root, вы можете сделать что-нибудь вроде этого, я думаю:
scp pub_key root@<host>:
ssh root@<host> 'mkdir -p ~postgres/.ssh; cat pub_key >> ~postgres/.ssh/authorized_keys; chown -R postgres.postgres ~postgres/.ssh; chmod 644 ~postgres/.ssh/authorized_keys; chmod 700 ~postgres/.ssh; rm -f pub_key'
что сначала скопирует публичный ключ (снова) на удаленный хост, затем добавит этот файл к ключам authorized_keys пользователя postgres и убедится, что у него есть правильные права доступа. Он также убедится, что каталог postgres/.ssh существует и имеет права собственности/разрешения
.Можно сделать что-то вроде:
для f в list_of_servers; do ssh root@${f} "mkdir -p ~postgres/.ssh; echo $KEY >> ~postgres/.ssh/authorized_keys; chown -R postgres:postgres ~postgres/. ssh; chmod 400 ~postgres/.ssh/authorized_keys; chmod 700 ~postgres/.ssh"; done
или если вы используете эти машины в автоматизации, используя что-то вроде куклы или соли, это будет тривиально
.Есть много похожих способов:
ssh root@SomeHost 'tar cpBf - . ssh/authorized_keys | sudo -iu postgres tar xpBf -'
на самом деле, эта самая команда копирует пользователю postgres все авторизованные ключи root, но обычно с этим нет проблем, так как доступ root всегда выше, а это значит, что любой пользователь с правами root может получить доступ к учётной записи postgres в любом случае.