如何通过SSH实现CentOS自动化运维,轻松提升运维效率?
- 内容介绍
- 文章标签
- 相关推荐
在日常运维中。频繁的登录、手工输入命令、密码泄露风险还有重复性任务占用大量人力,导致维护效率低下。通过 SSH 与自动化工具结合,可以一次性解决这些痛点:消除密码风险、降低人工错误、明显提高部署速度。
1. SSH 免密登录的痛点与方法
传统密码登录不仅不安全。还需要人工输入,导致每次操作都要停下来等待。使用 SSH 密钥可以:
- 消除密码泄露风险
- 实现一次配置,多台机器可同时使用
- 支持脚本自动化,无需人工干预
步骤如下的观点是。
1.1 生成 SSH 密钥对
在本地机器上执行:
ssh-keygen -t rsa -b 4096 -C "centos-admin"
1.2 将公钥复制到远程服务器
使用 ssh-copy-id 或手动拷贝:
ssh-copy-id user@remote_host
# 或者
cat ~/.ssh/id_rsa.pub | ssh user@remote_host 'mkdir -p ~/.ssh && cat>> ~/.ssh/authorized_keys'
1.3 验证无密码登录
ssh user@remote_host
# 若直接登录成功,即表示已完成免密配置
2. Ansible 自动化运维的主要优势
Ansible 利用 SSH 实现无代理式管理,能批量执行任务,适合大规模环境。
2.1 安装 Ansible
sudo yum install epel-release -y
sudo yum install ansible -y
2.2 配置主机清单
remote_host ansible_user=user ansible_ssh_private_key_file=~/.ssh/id_rsa
2.3 编写 Playbook 示例
---
- name: Deploy web stack on CentOS
hosts这方面,centos_servers
从become来看,yes
tasks的观点是,- name: Update all packages
从yum来看,name: "*"
state这方面,latest
- name: Install required packages
yum的观点是。name:
- httpd
- php
state这方面,present
- name: Ensure Apache is running and enabled
service:
name的观点是,httpd
state的观点是,started
enabled: yes
2.4 执行 Playbook 并查看结果
ansible-playbook deploy_web.yml --ask-become-pass --diff --check # 检查差异与测试模式
# 正式运行:
ansible-playbook deploy_web.yml --ask-become-pass # 若未设置 become_pass 可使用 sudo 密码缓存方式省时
3. 用 Shell 脚本配合 SSH 自动化日常任务
SHELL 脚本灵活易写,可较快完成一次性或周期性任务。
3.1 编写基础脚本示例
#!/bin/bash
REMOTE_USER=user
REMOTE_HOST=remote_host
# 更新程序并安装组件包
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo yum update -y"
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo yum install -y httpd php"
# 启动并开启 Apache 服务
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo systemctl enable --now httpd"
echo "部署完成"
3.2 赋予执行权限并运行脚本
chmod +x install.sh
./install.sh
Pain Point Highlight:
- 不需要手动逐台执行更新命令,节省数小时人力。
- SHELL 脚本可随时版本控制,保证操作可追溯。按理说,
- SCRIPT 的 idempotent 特性避免重复执行导致错误。按理说,
4. Expect 自动化交互式命令的实战场景
当某些命令仍需手动输入时Expect 可以模拟键盘输入。实现全自动,
4.1 安装 Expect
sudo yum install expect -y
4.2 编写 Expect 脚本示例
#!/usr/bin/expect -f
set timeout 30
spawn ssh user@remote_host
expect {
"*yes/no*" { send "yes\r";exp_continue }
"*assword:" { send "your_password\r" }
}
expect "$ "
send "sudo yum install -y httpd php\r"
expect "$ "
send "yes\r"
expect "$ "
send "sudo systemctl start httpd\r"
expect eof
puts "Expect script finished successfully"
exit 0
Pain Point Addressed:
- "无交互" 的部署流程避免了人为延误和输入错误。说起来,
- "远程多主机" 时只需复制脚本即可统一管理。说起来,
- "安全性" 上。只在 Expect 内部保存一次密码,减少泄露概率。其实,
5. 综合利用:一键部署多节点的完整流程示例
-
A. 先使用 SHELL + ssh-copy-id => 设置免密;B. 随后通过 Ansible playbook => 批量配置程序及应用;C. 若遇到交互提示,则调用
expect脚本 => 完成剩余步骤。老实说,
deploy_all.sh。只需一次启动就可以完成多节点上线。
/var/log/deploy.log,失败后自动回滚至上一个稳定状态。
⁰ ⁏ ⁎̵̶͇͘֍ֈֈ̸֑̈ᗺ̦͎✕✠﹂༅✾✩꒵❬✞ꟺꬼ𖬣𖽇𖽱﷽精穀ﲧ﴾ﳞﴛۥۣ۞ۓۏॱॸ॑㉿㉺㈔㈓㊰㊴ⓋⓃⒾ⟫〻︦〼⑃㈕⒌❇◯☼◎∬⌈⊥⊔⌒⌫⇉⇃⇇➻♢★◙�…—©,⋙⑲㈠⑿⅏㈠㈅⅞⅟₁₀⤴⤵↱↴↻☀︎✮⚑✆⚔⋱▂▃▅▆▇▓▒░※☉☾❎☆●☆★◕◕♪♪♬♪▼▲▼▲▼▲△▶►↙←→↕↑↓⇓↗↘↖⇲↱ᡥアウケキゲイイ「゚ー」XRARKSMDVHP-BOUNTCGETSPNAE‑
以上内容已按您的标题重新排版。并融入常见运维痛点与解决思路,希望能帮助您快速搭建稳健的 CentOS 自动化运维程序!按理说,祝项目顺利上线 🚀🎉!
在日常运维中。频繁的登录、手工输入命令、密码泄露风险还有重复性任务占用大量人力,导致维护效率低下。通过 SSH 与自动化工具结合,可以一次性解决这些痛点:消除密码风险、降低人工错误、明显提高部署速度。
1. SSH 免密登录的痛点与方法
传统密码登录不仅不安全。还需要人工输入,导致每次操作都要停下来等待。使用 SSH 密钥可以:
- 消除密码泄露风险
- 实现一次配置,多台机器可同时使用
- 支持脚本自动化,无需人工干预
步骤如下的观点是。
1.1 生成 SSH 密钥对
在本地机器上执行:
ssh-keygen -t rsa -b 4096 -C "centos-admin"
1.2 将公钥复制到远程服务器
使用 ssh-copy-id 或手动拷贝:
ssh-copy-id user@remote_host
# 或者
cat ~/.ssh/id_rsa.pub | ssh user@remote_host 'mkdir -p ~/.ssh && cat>> ~/.ssh/authorized_keys'
1.3 验证无密码登录
ssh user@remote_host
# 若直接登录成功,即表示已完成免密配置
2. Ansible 自动化运维的主要优势
Ansible 利用 SSH 实现无代理式管理,能批量执行任务,适合大规模环境。
2.1 安装 Ansible
sudo yum install epel-release -y
sudo yum install ansible -y
2.2 配置主机清单
remote_host ansible_user=user ansible_ssh_private_key_file=~/.ssh/id_rsa
2.3 编写 Playbook 示例
---
- name: Deploy web stack on CentOS
hosts这方面,centos_servers
从become来看,yes
tasks的观点是,- name: Update all packages
从yum来看,name: "*"
state这方面,latest
- name: Install required packages
yum的观点是。name:
- httpd
- php
state这方面,present
- name: Ensure Apache is running and enabled
service:
name的观点是,httpd
state的观点是,started
enabled: yes
2.4 执行 Playbook 并查看结果
ansible-playbook deploy_web.yml --ask-become-pass --diff --check # 检查差异与测试模式
# 正式运行:
ansible-playbook deploy_web.yml --ask-become-pass # 若未设置 become_pass 可使用 sudo 密码缓存方式省时
3. 用 Shell 脚本配合 SSH 自动化日常任务
SHELL 脚本灵活易写,可较快完成一次性或周期性任务。
3.1 编写基础脚本示例
#!/bin/bash
REMOTE_USER=user
REMOTE_HOST=remote_host
# 更新程序并安装组件包
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo yum update -y"
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo yum install -y httpd php"
# 启动并开启 Apache 服务
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo systemctl enable --now httpd"
echo "部署完成"
3.2 赋予执行权限并运行脚本
chmod +x install.sh
./install.sh
Pain Point Highlight:
- 不需要手动逐台执行更新命令,节省数小时人力。
- SHELL 脚本可随时版本控制,保证操作可追溯。按理说,
- SCRIPT 的 idempotent 特性避免重复执行导致错误。按理说,
4. Expect 自动化交互式命令的实战场景
当某些命令仍需手动输入时Expect 可以模拟键盘输入。实现全自动,
4.1 安装 Expect
sudo yum install expect -y
4.2 编写 Expect 脚本示例
#!/usr/bin/expect -f
set timeout 30
spawn ssh user@remote_host
expect {
"*yes/no*" { send "yes\r";exp_continue }
"*assword:" { send "your_password\r" }
}
expect "$ "
send "sudo yum install -y httpd php\r"
expect "$ "
send "yes\r"
expect "$ "
send "sudo systemctl start httpd\r"
expect eof
puts "Expect script finished successfully"
exit 0
Pain Point Addressed:
- "无交互" 的部署流程避免了人为延误和输入错误。说起来,
- "远程多主机" 时只需复制脚本即可统一管理。说起来,
- "安全性" 上。只在 Expect 内部保存一次密码,减少泄露概率。其实,
5. 综合利用:一键部署多节点的完整流程示例
-
A. 先使用 SHELL + ssh-copy-id => 设置免密;B. 随后通过 Ansible playbook => 批量配置程序及应用;C. 若遇到交互提示,则调用
expect脚本 => 完成剩余步骤。老实说,
deploy_all.sh。只需一次启动就可以完成多节点上线。
/var/log/deploy.log,失败后自动回滚至上一个稳定状态。
⁰ ⁏ ⁎̵̶͇͘֍ֈֈ̸֑̈ᗺ̦͎✕✠﹂༅✾✩꒵❬✞ꟺꬼ𖬣𖽇𖽱﷽精穀ﲧ﴾ﳞﴛۥۣ۞ۓۏॱॸ॑㉿㉺㈔㈓㊰㊴ⓋⓃⒾ⟫〻︦〼⑃㈕⒌❇◯☼◎∬⌈⊥⊔⌒⌫⇉⇃⇇➻♢★◙�…—©,⋙⑲㈠⑿⅏㈠㈅⅞⅟₁₀⤴⤵↱↴↻☀︎✮⚑✆⚔⋱▂▃▅▆▇▓▒░※☉☾❎☆●☆★◕◕♪♪♬♪▼▲▼▲▼▲△▶►↙←→↕↑↓⇓↗↘↖⇲↱ᡥアウケキゲイイ「゚ー」XRARKSMDVHP-BOUNTCGETSPNAE‑
以上内容已按您的标题重新排版。并融入常见运维痛点与解决思路,希望能帮助您快速搭建稳健的 CentOS 自动化运维程序!按理说,祝项目顺利上线 🚀🎉!

