管理用户置备

如何准备所需的管理员用户,配置SSH免密登陆,与免密sudo

Pigsty需要一个管理用户,该用户能够从元节点免密码SSH登陆其他节点,并免密码执行sudo命令。

如果您使用的是云服务器,通常在申请创建云服务器时,便会自动创建这样的管理用户给到客户。

管理用户

Pigsty需要一个管理用户,该用户能够从元节点上SSH登陆其他节点,并执行sudo命令。

  • 可以在元节点上使用该用户
  • 可以使用该用户SSH登陆所有被元节点(包括自身)
  • 可以在登陆所有被元节点后执行sudo命令(包括自身)
  • 管理用户不是postgres{{ dbsu }} (使用DBSU作为管理员有安全隐患)
  • ssh 登陆免密码,sudo 命令免密码(或您知晓如何通过-k,-K手工输入)

执行部署与变更时,您所使用的管理用户必须拥有所有节点的sshsudo权限。免密码并非必需,您总是可以在执行剧本时通过-k|-K参数传入ssh与sudo的密码,甚至通过 -eansible_host=<another_user> 使用其他用户来执行剧本。但Pigsty强烈建议为管理用户配置SSH免密码登陆与免密码sudo

Pigsty推荐将管理用户的创建,权限配置与密钥分发放在虚拟机的Provisioning阶段完成,作为机器资源交付内容的一部分。对于生产环境来说,机器交付时应当已经配置有这样一个具有免密远程SSH登陆并执行免密sudo的用户。通常绝大多数云平台和运维体系都可以做到这一点。

Pigsty剧本nodes 可以在节点上创建管理用户,但这涉及到一个先有鸡还是先有蛋但的问题:为了在远程节点执行Ansible剧本,需要有一个管理用户。为了创建一个专用管理用户,需要在远程节点上执行Ansible剧本。 作为Bootstrap阶段的妥协,只要您有SSH登陆与SUDO权限,即使没有密码,也可以用于执行Ansible剧本,详情请参考 Nodes:创建管理用户

配置SSH免密访问

在元节点上,假设执行命令的用户名为vagrant

生成密钥

vagrant用户的身份执行以ssh-keygen一路回车,会为vagrant生成公私钥对,用于登陆。

  1. [vagrant@node-3 ~]$ ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
  4. /home/vagrant/.ssh/id_rsa already exists.
  5. Overwrite (y/n)? y
  6. Enter passphrase (empty for no passphrase):
  7. Enter same passphrase again:
  8. Your identification has been saved in /home/vagrant/.ssh/id_rsa.
  9. Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
  10. The key fingerprint is:
  11. SHA256:nys41SqjxFcQYDJO2WkT/ZOB2rlechcOztPEZhrYSR0 vagrant@node-3
  12. The key's randomart image is:
  13. +---[RSA 2048]----+
  14. | +o+=.. .E. |
  15. | o.+= o.o . |
  16. | .. +.* = |
  17. | . +.O * |
  18. | +S% . |
  19. | . o.O.=. |
  20. | o..* +o |
  21. | . .* o . |
  22. | .. + .. |
  23. +----[SHA256]-----+
  24. [vagrant@node-3 ~]$
  25. [vagrant@node-3 ~]$
  • 默认公钥:~/.ssh/id_rsa.pub
  • 默认私钥:~/.ssh/id_rsa

安装密钥

将公钥添加至需要登陆机器的对应用户上:/home/vagrant/.ssh/authorized_keys

如果您已经可以直接通过密码访问远程机器,可以直接通过ssh-copy-id的方式拷贝公钥。

  1. # 输入密码以完成公钥拷贝
  2. ssh-copy-id <ip>
  3. # 直接将密码嵌入命令中,避免交互式密码输入
  4. sshpass -p <password> ssh-copy-id <ip>

然后便可以通过该用户免密码SSH登陆远程机器。

配置免密SUDO

假设用户名为vagrant,则通过visudo 命令,或创建/etc/sudoers.d/vagrant 文件添加以下记录:

  1. %vagrant ALL=(ALL) NOPASSWD: ALL

则 vagrant 用户即可免密sudo执行所有命令

最后修改 2022-05-27: init commit (1e3e284)