管理用户置备
如何准备所需的管理员用户,配置SSH免密登陆,与免密sudo
Pigsty需要一个管理用户,该用户能够从元节点上免密码SSH登陆其他节点,并免密码执行sudo命令。
如果您使用的是云服务器,通常在申请创建云服务器时,便会自动创建这样的管理用户给到客户。
管理用户
Pigsty需要一个管理用户,该用户能够从元节点上SSH登陆其他节点,并执行sudo
命令。
- 可以在元节点上使用该用户
- 可以使用该用户SSH登陆所有被元节点(包括自身)
- 可以在登陆所有被元节点后执行sudo命令(包括自身)
- 管理用户不是
postgres
或{{ dbsu }}
(使用DBSU作为管理员有安全隐患) - ssh 登陆免密码,sudo 命令免密码(或您知晓如何通过
-k
,-K
手工输入)
执行部署与变更时,您所使用的管理用户必须拥有所有节点的ssh
与sudo
权限。免密码并非必需,您总是可以在执行剧本时通过-k|-K
参数传入ssh与sudo的密码,甚至通过 -e
ansible_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
生成公私钥对,用于登陆。
[vagrant@node-3 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
/home/vagrant/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:nys41SqjxFcQYDJO2WkT/ZOB2rlechcOztPEZhrYSR0 vagrant@node-3
The key's randomart image is:
+---[RSA 2048]----+
| +o+=.. .E. |
| o.+= o.o . |
| .. +.* = |
| . +.O * |
| +S% . |
| . o.O.=. |
| o..* +o |
| . .* o . |
| .. + .. |
+----[SHA256]-----+
[vagrant@node-3 ~]$
[vagrant@node-3 ~]$
- 默认公钥:
~/.ssh/id_rsa.pub
- 默认私钥:
~/.ssh/id_rsa
安装密钥
将公钥添加至需要登陆机器的对应用户上:/home/vagrant/.ssh/authorized_keys
如果您已经可以直接通过密码访问远程机器,可以直接通过ssh-copy-id
的方式拷贝公钥。
# 输入密码以完成公钥拷贝
ssh-copy-id <ip>
# 直接将密码嵌入命令中,避免交互式密码输入
sshpass -p <password> ssh-copy-id <ip>
然后便可以通过该用户免密码SSH登陆远程机器。
配置免密SUDO
假设用户名为vagrant
,则通过visudo
命令,或创建/etc/sudoers.d/vagrant
文件添加以下记录:
%vagrant ALL=(ALL) NOPASSWD: ALL
则 vagrant 用户即可免密sudo
执行所有命令
最后修改 2022-05-27: init commit (1e3e284)