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