Назад | Перейти на главную страницу

ssh-copy-id без пароля для пользователя `postgres`

У меня есть N хостов, где я могу войти в систему без пароля через ssh для пользователя root.

Для этих машин мне нравится добавлять ssh-pub-key в authorized_keys пользователя postgres.

Цель: я хочу войти в систему без пароля для пользователя postgres, слишком.

AFAIK инструмент ssh-copy-id здесь не помогает, так как я хочу, чтобы действие «добавить ssh-pub-key в postgres пользователя» было без пароля.

Как это решить?

Есть много похожих способов (сделать) это:

ssh root@SomeHost 'tar cpBf - .ssh/authorized_keys | sudo -iu postgres tar xpBf -'

Фактически, эта самая команда копирует все авторизованные ключи root пользователю postgres, но обычно с этим нет проблем, поскольку root-доступ всегда лучше, и это означает, что любой, кто имеет root-доступ, может получить доступ к учетной записи 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 существует и имеет права собственности / разрешения.

Вы можете сделать что-то вроде:

for f in 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

или если у вас есть эти машины в автоматизации, используя что-то вроде Puppet или Salt, это было бы тривиально.