没有密码的ssh-copy-id给用户`postgres`

我有N个主机,我可以通过SSH用户root进行无密码login。

对于那些我喜欢给用户postgres authorized_keys添加ssh-pub-key的机器。

目标:我也想无密码login到用户postgres

AFAIK工具ssh-copy-id在这里没有帮助,因为我想要“添加ssh-pub-key到用户postgres”的行动是无密码的。

如何解决这个问题?

那么,如果你可以以root身份进行无密码login,你可以做这样的事情我猜:

 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' 

它将首先复制公钥(再次)到远程主机,然后将该文件添加到postgres用户的authorized_keys,并确保它具有正确的权限。 它也将确保postgres / .ssh目录存在并具有正确的所有权/权限

有很多类似的方法来(做):

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

实际上,这个命令将整个root的授权密钥复制到postgres的用户,但通常没有问题,因为root的访问总是优越的,这意味着任何有root权限的人都可以访问postgres的帐户。

你可以做这样的事情:

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这样的自动化工具来处理这些机器,这将是微不足道的。