ssh-copy-id 无密码复制到用户 `postgres`

ssh-copy-id 无密码复制到用户 `postgres`

我有 N 个主机,我可以在哪里通过 ssh 进行无密码用户登录root

对于那些机器,我喜欢将 ssh-pub-key 添加到用户的 authorized_keys 中postgres

postgres目标:我也希望用户能够无密码登录。

据我所知,该工具ssh-copy-id在这里没有帮助,因为我希望“将 ssh-pub-key 添加到用户 postgres”操作无需密码。

如何解决这个问题?

答案1

好吧,如果你能以 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'

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

答案2

有很多类似的方法可以做到这一点:

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

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

答案3

你可以做类似的事情:

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 之类的工具让这些机器实现自动化,那么这将是小事一桩。

相关内容