然而,传统的基于密码的认证方式不仅效率低下,还存在安全风险
为了实现更高效、安全的服务器管理,免密登录成为了一个不可或缺的工具
本文将详细介绍如何通过SSH密钥对、Ansible自动化工具以及配置管理最佳实践,实现服务器之间的免密登录,确保运维工作的高效与安全
一、SSH密钥对:免密登录的基础 SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中安全地传输数据
SSH密钥对是SSH协议中实现免密登录的核心机制
它包含一对密钥:公钥(public key)和私钥(private key)
公钥可以公开分享,而私钥必须保密
1. 生成SSH密钥对 首先,在本地计算机或管理服务器上生成SSH密钥对
使用以下命令: ssh-keygen -t rsa -b 4096 -C your_email@example.com - `-t rsa` 指定密钥类型为RSA
- `-b 4096` 指定密钥长度为4096位,增强安全性
- `-C` 添加注释,通常是你的邮箱,便于识别
按照提示,选择保存位置(默认是`~/.ssh/id_rsa`和`~/.ssh/id_rsa.pub`)并设置密码短语(可选,但出于安全考虑建议设置)
2. 将公钥复制到目标服务器 使用`ssh-copy-id`命令将公钥复制到目标服务器的`~/.ssh/authorized_keys`文件中: ssh-copy-id user@remote_server_ip - `user` 是目标服务器上的用户名
- `remote_server_ip` 是目标服务器的IP地址或域名
如果目标服务器没有`~/.ssh`目录或`authorized_keys`文件,`ssh-copy-id`会自动创建它们
3. 验证免密登录 现在,尝试通过SSH连接到目标服务器,无需输入密码即可登录: ssh user@remote_server_ip 如果一切顺利,你将直接登录到目标服务器,无需输入密码
二、使用Ansible实现自动化配置 手动配置每个服务器的SSH密钥对虽然可行,但效率不高,特别是在大型环境中
Ansible是一个自动化平台,能够简化配置管理、应用部署和任务自动化
通过Ansible,你可以轻松地在多台服务器上部署SSH密钥对,实现免密登录
1. 安装Ansible 在控制节点上安装Ansible
对于Ubuntu,可以使用以下命令: sudo apt update sudo apt install ansible 2. 准备Ansible Inventory文件 Inventory文件(通常是`/etc/ansible/hosts`)定义了Ansible可以管理的服务器列表
例如: 【servers】 server1ansible_host=192.168.1.10ansible_user=user server2ansible_host=192.168.1.20ansible_user=user 3. 编写Ansible Playbook 创建一个Ansible Playbook文件(例如`setup_ssh_keys.yml`),用于部署SSH密钥对: --- - name: Deploy SSH keys hosts: servers tasks: - name: Ensure .ssh directory exists file: path: ~/.ssh state: directory mode: 07