我几乎每天都要将文件复制到不同的服务器。我通常会这样做:
scp filename user@destinationhost:/destination/folder
我反复运行相同的命令更改目标主机,直到完成所有服务器。将同一文件传输到这些不同服务器的最佳(和最快)方法是什么?
另一个缺点是我需要一遍又一遍地输入密码,但是使用 rsa 不是一个选择,因为几个人可以连接到源服务器。
编辑-我发现循环命令行这可能会奏效:
for h in host1 host2 host3 host4 ; { scp file user@$h:/destination_path/ ; }
答案1
答案2
尝试使用期望脚本执行此操作,例如
#!/bin/bash
HOSTS="h1.lan h2.lan h3.lan"
read -p "Password: " PASSWORD
for HOST in $HOSTS
do
expect -c "
spawn /usr/bin/scp file user@$HOST:/destination_path/
expect {
"*password:*" { send $PASSWORD\r;interact }
}
exit
"
done
以上内容应该相当简单,可以适应您的要求。
答案3
我认为sshpass
应该在这里提一下。这是我向多个目标发送文件并要求输入密码的示例:
filePath="/home/download/textToSend.txt"
ip_range=("10.10.10.1" "10.10.10.2" "10.10.10.3" "10.10.10.4")
# Start file transfer
echo "Starting file transfer to ${#ip_range[@]} units."
for ((i=0; i<${#ip_range[@]}; ++i )) ;
do
echo "Transfering ${filePath} to ${ip_range[$i]}..."
sshpass -p password scp -o 'StrictHostKeyChecking=no' "${filePath}" root@${ip_range[$i]}:/home/downloads&
done
wait
echo "File transfers ended"
答案4
我在类似情况下使用了“sshpt”。SSH Power Tool (sshpt) 可让您通过 SSH 同时执行命令并将文件上传到多台服务器,而无需使用预共享密钥。上传的文件和命令可以直接执行,也可以通过 sudo 执行。