1.8. 配置与 ssh 系统角色的安全通信
作为管理员,您可以使用 sshd
系统角色配置 SSH 服务器和 ssh
系统角色,通过使用 Red Hat Ansible Automation Platform 在任意数量的 RHEL 系统上同时配置 SSH 客户端。
1.8.1. sshd
RHEL 系统角色的变量
在 sshd
系统角色 playbook 中,您可以根据您的首选项和限制定义 SSH 配置文件的参数。
如果没有配置这些变量,系统角色会生成一个与 RHEL 默认值匹配的 sshd_config
文件。
在所有情况下,布尔值在 sshd
配置中都正确呈现为 yes
和 no
。您可以使用 list 来定义多行配置项。例如:
sshd_ListenAddress: - 0.0.0.0 - '::'
呈现为:
ListenAddress 0.0.0.0 ListenAddress ::
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
文件 -
/usr/share/doc/rhel-system-roles/sshd/
directory
1.8.2. 使用 sshd
RHEL 系统角色配置 OpenSSH 服务器
您可以通过运行 Ansible playbook,使用 sshd
RHEL 系统角色来配置多个 SSH 服务器。
您可以将 sshd
RHEL 系统角色用于更改 SSH 和 SSHD 配置的其他 RHEL 系统角色,如身份管理 RHEL 系统角色。要防止配置被覆盖,请确保 sshd
角色使用命名空间(RHEL 8 和更早的版本)或 drop-in 目录(RHEL 9)。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: SSH server configuration hosts: managed-node-01.example.com tasks: - name: Configure sshd to prevent root and password login except from particular subnet ansible.builtin.include_role: name: rhel-system-roles.sshd vars: sshd: PermitRootLogin: no PasswordAuthentication: no Match: - Condition: "Address 192.0.2.0/24" PermitRootLogin: yes PasswordAuthentication: yes
playbook 将受管节点配置为 SSH 服务器,以便:
-
禁用密码和
root
用户登录 -
只对子网
192.0.2.0/24
启用密码和root
用户登录
-
禁用密码和
验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
登录到 SSH 服务器:
$ ssh <username>@<ssh_server>
验证 SSH 服务器中的
sshd_config
文件的内容:$ cat /etc/ssh/sshd_config ... PasswordAuthentication no PermitRootLogin no ... Match Address 192.0.2.0/24 PasswordAuthentication yes PermitRootLogin yes ...
检查您是否可以以 root 用户身份从
192.0.2.0/24
子网连接到服务器:确定您的 IP 地址:
$ hostname -I 192.0.2.1
如果 IP 地址在
192.0.2.1
-192.0.2.254
范围内,您可以连接到服务器。以
root
用户身份连接到服务器:$ ssh root@<ssh_server>
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
文件 -
/usr/share/doc/rhel-system-roles/sshd/
directory
1.8.3. ssh
RHEL 系统角色的变量
在 ssh
系统角色 playbook 中,您可以根据您的首选项和限制定义客户端 SSH 配置文件的参数。
如果没有配置这些变量,系统角色会生成一个与 RHEL 默认值匹配的全局 ssh_config
文件。
在所有情况下,布尔值在 ssh
配置中都正确地呈现为 yes
或 no
。您可以使用 list 来定义多行配置项。例如:
LocalForward: - 22 localhost:2222 - 403 localhost:4003
呈现为:
LocalForward 22 localhost:2222 LocalForward 403 localhost:4003
配置选项区分大小写。
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md
file -
/usr/share/doc/rhel-system-roles/ssh/
directory
1.8.4. 使用 ssh
RHEL 系统角色配置 OpenSSH 客户端
您可以通过运行 Ansible playbook,使用 ssh
RHEL 系统角色来配置多个 SSH 客户端。
您可以将 ssh
RHEL 系统角色用于更改 SSH 和 SSHD 配置的其他系统角色,如身份管理 RHEL 系统角色。要防止配置被覆盖,请确保 ssh
角色使用置入目录(在 RHEL 8 及更新的版本中使用)。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: SSH client configuration hosts: managed-node-01.example.com tasks: - name: "Configure ssh clients" ansible.builtin.include_role: name: rhel-system-roles.ssh vars: ssh_user: root ssh: Compression: true GSSAPIAuthentication: no ControlMaster: auto ControlPath: ~/.ssh/.cm%C Host: - Condition: example Hostname: server.example.com User: user1 ssh_ForwardX11: no
此 playbook 使用以下配置在受管节点上配置
root
用户的 SSH 客户端首选项:- 压缩已启用。
-
ControlMaster 多路复用设置为
auto
。 -
连接到
server.
主机的示例别名是example
.comuser1
。 -
创建
示例
主机别名,它代表使用user1
用户名连接到server.example.com
主机。 - X11 转发被禁用。
验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
通过显示 SSH 配置文件来验证受管节点是否具有正确的配置:
# cat ~/root/.ssh/config # Ansible managed Compression yes ControlMaster auto ControlPath ~/.ssh/.cm%C ForwardX11 no GSSAPIAuthentication no Host example Hostname example.com User user1
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md
file -
/usr/share/doc/rhel-system-roles/ssh/
directory
1.8.5. 将 sshd
RHEL 系统角色用于非独占配置
通常,应用 sshd
系统角色会覆盖整个配置。如果您之前已调整了配置,例如使用不同的系统角色或 playbook,这可能会出现问题。要只对所选配置选项应用 sshd
系统角色,同时保留其他选项,您可以使用非排除配置。
您可以应用非独占配置:
- 在 RHEL 8 及更早版本中,使用配置片断。
-
在 RHEL 9 及更高版本中,使用置入目录中的文件。默认配置文件已放入随时可访问的目录中,存为
/etc/ssh/sshd_config.d/00-ansible_system_role.conf
。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:对于运行 RHEL 8 或更早版本的受管节点:
--- - name: Non-exclusive sshd configuration hosts: managed-node-01.example.com tasks: - name: <Configure SSHD to accept some useful environment variables> ansible.builtin.include_role: name: rhel-system-roles.sshd vars: sshd_config_namespace: <my-application> sshd: # Environment variables to accept AcceptEnv: LANG LS_COLORS EDITOR
对于运行 RHEL 9 或更高版本的受管节点:
- name: Non-exclusive sshd configuration hosts: managed-node-01.example.com tasks: - name: <Configure sshd to accept some useful environment variables> ansible.builtin.include_role: name: rhel-system-roles.sshd vars: sshd_config_file: /etc/ssh/sshd_config.d/<42-my-application>.conf sshd: # Environment variables to accept AcceptEnv: LANG LS_COLORS EDITOR
在
sshd_config_file
变量中,定义sshd
系统角色在其中写入配置选项的.conf
文件。使用两位前缀,例如42-
来指定应用配置文件的顺序。
验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
验证 SSH 服务器上的配置:
对于运行 RHEL 8 或更早版本的受管节点:
# cat /etc/ssh/sshd_config.d/42-my-application.conf # Ansible managed # AcceptEnv LANG LS_COLORS EDITOR
对于运行 RHEL 9 或更高版本的受管节点:
# cat /etc/ssh/sshd_config ... # BEGIN sshd system role managed block: namespace <my-application> Match all AcceptEnv LANG LS_COLORS EDITOR # END sshd system role managed block: namespace <my-application>
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
文件 -
/usr/share/doc/rhel-system-roles/sshd/
directory