侧边栏壁纸
博主头像
Setyg的博客

当秋风染红落叶的时候,就是新生~

  • 累计撰写 86 篇文章
  • 累计创建 66 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux 跨服务器远程执行命令使用实践

Setyg
2026-10-04 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

Linux 跨服务器远程执行命令使用实践

概述

在日常运维和 DevOps 工作中,经常需要对多台服务器进行批量操作,如检查状态、更新配置、重启服务等。通过远程执行命令,可以高效地管理分布式环境,避免手动登录每台服务器的繁琐。

核心工具:SSH

SSH (Secure Shell) 是最常用且最安全的远程执行命令的协议。它提供加密通信,确保命令和数据传输的安全性。

基本语法

ssh user@hostname "command"

实战示例

1. 单台服务器执行命令

直接在命令行中执行:

ssh user@192.168.1.100 "df -h"

该命令会连接到 192.168.1.100 这台服务器,执行 df -h 命令并返回结果。

2. 多台服务器批量执行命令

使用 shell 循环或数组来批量执行:

# 方法一:for 循环
domains=(server1 server2 server3)
for domain in ${domains[@]}; do
  echo "--- Executing on $domain ---"
  ssh user@$domain "echo 'Hello from $domain'; uptime"
  sleep 1
done
# 方法二:结合 find / xargs
find servers.txt -exec ssh user@{} "uptime" \;

3. 从文件读取服务器列表

创建一个包含所有服务器 IP/Hostnames 的文件 servers.txt:

# servers.txt 内容示例
centos-server-01.example.com
ubuntu-server-02.example.com
rocky-linux-03.example.com

然后用以下命令批量执行:

while IFS= read -r host; do
  echo "Executing on $host"
  ssh user@$host "sudo systemctl status nginx"
  echo "--- Done with $host ---\n"
done < servers.txt

4. 批量执行复杂脚本

将复杂的操作写成一个脚本文件 check_health.sh,然后分发并执行:

# check_health.sh 内容
echo "Starting health check..."
uname -a
free -h
lsof -i :80
ps aux | grep nginx

分发并执行:

# 将脚本复制到所有服务器并执行
tar czf script.tar.gz check_health.sh
for host in $(cat servers.txt); do
  scp script.tar.gz user@$host:/tmp/
  ssh user@$host "cd /tmp && tar xzf script.tar.gz && bash check_health.sh"
  echo "--- Done on $host ---\n"
  rm -f script.tar.gz
done

高级工具:Ansible

对于更复杂的场景,推荐使用 Ansible 等自动化工具。它提供了更强大的编排能力,支持 Playbook 和 Inventory 管理。

Ansible 示例

# inventory.ini
[webservers]
web1 ansible_host=192.168.1.101
web2 ansible_host=192.168.1.102

[database]
db1 ansible_host=192.168.1.103
# playbook.yml
---
- name: Check system status on all servers
  hosts: all
  become: yes
  tasks:
    - name: Get system info
      shell: uname -a
      register: sys_info

    - name: Display system info
      debug:
        msg: "System: {{ sys_info.stdout }}"

运行:

ansible-playbook -i inventory.ini playbook.yml

安全建议

  • 使用密钥认证:避免密码暴露,设置 SSH 密钥认证。

  • 限制访问权限:只允许必要的用户和组访问服务器。

  • 定期轮换密钥:增强安全性。

  • 监控日志:记录所有远程执行的操作,便于审计。

  • 谨慎使用 root:避免直接用 root 用户执行命令,使用普通用户加 sudo。

常见问题排查

问题 1:拒绝连接 (Permission denied)

检查:

  • SSH 服务是否在目标服务器上运行。

  • 防火墙是否放行了 22 端口。

  • 用户名和密码是否正确(如果使用密码)。

  • SSH 密钥是否已正确添加到目标服务器的 ~/.ssh/authorized_keys 文件中。

问题 2:命令执行后立即退出

确保你的命令不会因为缺少终端而立即终止。如果命令是交互式的,考虑使用 nohup 或 & 后台运行。

问题 3:超时

增加超时时间:

ssh -o ConnectTimeout=60 user@hostname "command"

总结

掌握 Linux 跨服务器远程执行命令的能力,是现代运维的核心技能。从简单的 `ssh user@host "cmd"` 到复杂的脚本循环和 Ansible Playbook,可以根据实际需求选择合适的方法。安全、高效地管理多台服务器,让系统运维工作事半功倍。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区