最近在整理公司内网的运维体系时,发现一个痛点:内网部署的NAS设备管理起来相当麻烦。每次需要调整配置或更新服务,都得跑到机房接显示器键盘操作。作为运维人员,这种低效的方式实在难以忍受。经过一番技术选型,最终用Ansible实现了内网NAS的远程管理方案,现在连核心交换机上的NAS都能通过命令行轻松管控了。
这套方案的核心价值在于:
典型的内网NAS管理场景存在以下特点:
选择Ansible主要基于以下考量:
mermaid复制graph TD
A[控制节点] -->|SSH| B(NAS设备1)
A -->|SSH| C(NAS设备2)
A -->|SSH| D(NAS设备3)
重要提示:实际部署时需要确保控制节点到NAS设备的SSH连通性,建议使用密钥认证方式
bash复制# 安装Ansible
sudo apt update
sudo apt install -y ansible
# 生成SSH密钥对
ssh-keygen -t ed25519 -C "ansible-control"
创建初始inventory文件nas-hosts:
ini复制[nas_servers]
nas01 ansible_host=192.168.1.100 ansible_user=admin
nas02 ansible_host=192.168.1.101 ansible_user=admin
[nas_servers:vars]
ansible_ssh_private_key_file=~/.ssh/ansible-control
测试连通性:
bash复制ansible -i nas-hosts all -m ping
yaml复制- name: Update NAS packages
hosts: nas_servers
become: yes
tasks:
- name: Update package index
apt:
update_cache: yes
cache_valid_time: 3600
- name: Upgrade all packages
apt:
upgrade: dist
yaml复制- name: Deploy Samba config
hosts: nas_servers
become: yes
tasks:
- name: Ensure config directory
file:
path: /etc/samba/conf.d
state: directory
mode: '0755'
- name: Deploy main config
template:
src: templates/smb.conf.j2
dest: /etc/samba/smb.conf
owner: root
group: root
mode: '0644'
notify: restart smbd
对于大规模NAS集群,建议使用动态inventory脚本。以下是对接NAS API的示例:
python复制#!/usr/bin/env python3
import json
from nas_api import list_devices
def main():
devices = list_devices()
inventory = {
'_meta': {
'hostvars': {}
},
'nas_servers': {
'hosts': [],
'vars': {
'ansible_user': 'admin'
}
}
}
for dev in devices:
inventory['nas_servers']['hosts'].append(dev['hostname'])
inventory['_meta']['hostvars'][dev['hostname']] = {
'ansible_host': dev['ip']
}
print(json.dumps(inventory))
if __name__ == '__main__':
main()
建议在Playbook中加入安全基线检查:
yaml复制- name: Security hardening
hosts: nas_servers
become: yes
tasks:
- name: Check SSH configuration
blockinfile:
path: /etc/ssh/sshd_config
block: |
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
notify: restart sshd
症状:Connection timeout/refused
排查步骤:
症状:Missing sudo privileges
解决方案:
become: yes--ask-become-pass参数配置示例:
bash复制# ansible.cfg
[defaults]
log_path = ./ansible.log
retry_files_enabled = False
host_key_checking = False
这套方案在我们生产环境稳定运行超过6个月,管理着30+台内网NAS设备。最大的收获是运维效率提升了80%以上,配置错误率下降95%。对于需要管理内网存储设备的团队,强烈推荐尝试这个方案。