You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现多服务器SCP自动化?基于IP文本文件批量分发文件

嘿,刚好我之前处理过不少批量SCP自动化的需求,给你分享两个实用的解决方案:

1. 多服务器场景下SCP操作自动化的实现思路

要实现多服务器SCP自动化,免密SSH登录是核心前提——不然每次传输都要手动输密码,根本谈不到自动化。

第一步:配置免密SSH登录

如果还没生成过SSH密钥对,先在本地机器生成:

ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

参数说明:-N ""表示设置空密码(避免后续脚本执行时弹出密码提示),-f指定密钥保存路径,一路回车即可完成生成。

接下来把公钥复制到所有目标服务器上(第一次需要输入目标机器的登录密码):

ssh-copy-id username@target_server_ip

如果服务器数量多,可以后面结合批量脚本完成这一步,不用手动逐个操作。

第二步:编写批量SCP脚本

如果是固定的服务器列表,可以直接把服务器信息写在脚本里,示例如下:

#!/bin/bash
# 定义目标服务器列表,格式为「用户名@IP地址」
servers=(
  "dev_user@192.168.1.20"
  "test_user@192.168.1.21"
  "prod_user@192.168.1.22"
)
# 本地要传输的文件/目录路径
local_resource="/home/local_user/data_backup.tar.gz"
# 目标服务器的存储路径
remote_dir="/data/backups/"

# 遍历服务器列表执行SCP
for server in "${servers[@]}"; do
  echo "开始向 $server 传输文件..."
  scp "$local_resource" "$server:$remote_dir"
  
  # 检查传输结果并输出日志
  if [ $? -eq 0 ]; then
    echo "✅ 向 $server 传输成功!"
  else
    echo "❌ 向 $server 传输失败,请检查网络或路径!"
  fi
done

给脚本添加执行权限后就能直接运行:

chmod +x batch_scp.sh
./batch_scp.sh
2. 从IP文本文件批量执行SCP传输

如果所有目标机器的IP都存在文本文件里(比如server_list.txt),我们可以通过循环读取文件内容来实现批量传输。

第一步:整理服务器列表文件

确保server_list.txt的格式清晰,每行一个服务器信息:

dev_user@192.168.1.20
test_user@192.168.1.21
192.168.1.22  # 如果目标服务器用户名和本地一致,可只写IP
# 这是注释行,脚本会自动跳过

第二步:编写读取文件的批量SCP脚本

#!/bin/bash
# 服务器列表文件路径
server_file="./server_list.txt"
# 本地要传输的资源路径
local_resource="/home/local_user/deploy_package.zip"
# 目标服务器存储路径
remote_dir="/opt/apps/"

# 先检查列表文件是否存在
if [ ! -f "$server_file" ]; then
  echo "错误:找不到服务器列表文件 $server_file!"
  exit 1
fi

# 逐行读取文件内容
while IFS= read -r server; do
  # 跳过空行和注释行(以#开头的行)
  if [[ -z "$server" || "$server" =~ ^# ]]; then
    continue
  fi

  echo "正在处理服务器:$server"
  # 如果目标服务器SSH端口不是默认22,添加-P参数,比如scp -P 2222 ...
  scp "$local_resource" "$server:$remote_dir"

  # 记录传输结果到日志文件
  if [ $? -eq 0 ]; then
    echo "$(date +'%Y-%m-%d %H:%M:%S') - $server 传输成功" >> scp_success.log
    echo "✅ $server 传输完成"
  else
    echo "$(date +'%Y-%m-%d %H:%M:%S') - $server 传输失败" >> scp_fail.log
    echo "❌ $server 传输失败"
  fi
done < "$server_file"

echo "批量传输任务结束!成功日志查看 scp_success.log,失败日志查看 scp_fail.log"

同样给脚本加执行权限后运行即可。

额外实用小贴士

  • 传输目录时,添加-r参数:scp -r /local/dir/ "$server:/remote/dir/"
  • 网络较慢时,添加-C参数开启压缩传输,提升速度:scp -C "$local_resource" "$server:$remote_dir"
  • 如果需要跳过主机密钥验证(测试环境可用,生产环境不建议),可以在scp命令前加-o StrictHostKeyChecking=no

内容的提问来源于stack exchange,提问作者sourabh malavade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:42:48