在 KPCOS/炎帝 1.01 上配置 Ansible 使用 SSH 进行服务器管理

在 KPCOS/炎帝 1.01 上配置 Ansible 使用 SSH 进行服务器管理的完整指南如下:


1. 基础环境准备

控制节点(管理机)

sudo apt update
sudo apt install ansible sshpass -y  # 安装 Ansible 和 SSH 密码工具

被管节点(目标服务器)

确保所有目标服务器:

  • 开启 SSH 服务(sudo systemctl status ssh
  • 有可通过密码或密钥登录的管理用户

2. SSH 密钥配置(推荐免密登录)

生成密钥对(控制节点)

ssh-keygen -t ed25519 -f ~/.ssh/ansible_key  # 更安全的密钥类型

分发公钥到所有节点

# 单台服务器分发
ssh-copy-id -i ~/.ssh/ansible_key.pub user@server_ip

# 批量分发(需先配置好清单文件)
ansible all -i inventory.ini -m ansible.builtin.authorized_key \
  -a "user=your_user key='{{ lookup('file', '~/.ssh/ansible_key.pub') }}'" \
  --ask-pass --ask-become-pass

3. 配置 Ansible 清单文件

创建 inventory.ini

# 分组定义服务器
[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[db_servers]
db1 ansible_host=192.168.1.20

# 全局变量(所有服务器生效)
[all:vars]
ansible_user=admin
ansible_ssh_private_key_file=~/.ssh/ansible_key
ansible_python_interpreter=/usr/bin/python3

4. 测试 SSH 连接

# 测试所有节点连通性
ansible all -i inventory.ini -m ping

# 测试特定分组
ansible web_servers -i inventory.ini -m ping

成功响应示例:

web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

5. 配置 SSH 连接参数(可选)

inventory.ini 中添加高级 SSH 参数:

[all:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o ConnectTimeout=5'
ansible_become=true          # 默认使用 sudo
ansible_become_method=sudo   # 提权方式
ansible_become_pass=your_sudo_password  # 密码(建议用 vault 加密)

6. 自定义 SSH 配置(ansible.cfg)

创建 ansible.cfg 文件:

[defaults]
inventory = inventory.ini
private_key_file = ~/.ssh/ansible_key
host_key_checking = False  # 禁用主机密钥验证(测试环境)
log_path = ./ansible.log   # 启用日志记录

[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s
pipelining = True  # 加速执行

7. 执行远程命令示例

# 获取所有服务器的磁盘信息
ansible all -m shell -a "df -h"

# 重启 web 服务器组
ansible web_servers -m reboot --become

8. 创建 Playbook 示例

basic_setup.yml

---
- name: Basic Server Setup
  hosts: all
  become: yes  # 使用特权

  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install essential packages
      apt:
        name:
          - htop
          - tmux
          - net-tools
        state: present

    - name: Ensure SSH service is running
      service:
        name: ssh
        state: started
        enabled: yes

运行 Playbook:

ansible-playbook basic_setup.yml

9. SSH 连接问题排错

常见错误解决:

  1. 主机密钥验证失败

    # 手动接受密钥(临时方案)
    ssh -i ~/.ssh/ansible_key user@host
  2. 权限被拒绝

    • 确认目标服务器 /etc/ssh/sshd_config 包含:
      PermitRootLogin no
      PasswordAuthentication no  # 密钥登录需禁用密码
      PubkeyAuthentication yes
  3. 连接超时

    # 在 ansible.cfg 增加超时设置
    [ssh_connection]
    timeout = 30

10. 安全增强措施

  1. 使用 Ansible Vault 加密密码

    ansible-vault create secrets.yml

    在 Playbook 中引用:

    vars_files:
     - secrets.yml
  2. 限制 SSH 访问

    - name: Secure SSH config
     template:
       src: sshd_config.j2
       dest: /etc/ssh/sshd_config
     notify: Restart SSH
  3. 定期轮换密钥

    # 重新生成并分发密钥的 Playbook
    - name: Rotate SSH keys
     hosts: all
     tasks:
       - name: Generate new key
         openssh_keypair:
           path: ~/.ssh/new_key
           type: ed25519
       - name: Deploy new key
         authorized_key: ...

最终验证:

ansible all -m setup  # 收集所有节点系统信息
ansible web_servers -m service -a "name=nginx state=started" --become

此配置可实现:

  • ✅ 基于密钥的安全 SSH 连接
  • ✅ 分组服务器管理
  • ✅ 特权操作支持
  • ✅ 详细日志记录
  • ✅ 企业级安全实践

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

en_USEnglish