使用scp将文件复制到不同的服务器

几乎每天都要将文件复制到不同的服务器上。 我通常做的是:

scp filename user@destinationhost:/destination/folder 

我一遍又一遍地运行这个相同的命令,直到完成所有的服务器。 将同一文件传输到不同服务器的最佳(最快)方式是什么?

另一个缺点是我需要反复input密码,但使用rsa不是一个选项,因为有几个人可以连接到源服务器。

编辑 – 我在commandlinefufind循环可能会做的伎俩:

  for h in host1 host2 host3 host4 ; { scp file user@$h:/destination_path/ ; } 

有各种工具可以scp文件到多个主机(同时连接),如pssh和kanif 。 在密码方面,我会build议使用代理转发 。 这使您可以将密钥保存在本地计算机上,但在从其他主机启动SSH连接时使用它。 否则, --askpass中的parallel-scp命令的--askpass选项会提示input每个主机的密码。

如果你不能安装一个工具来完成这个工作,设置代理转发(当连接到机器时,通过向ssh添加-A选项),然后像下面这样循环运行scp

 for HOST in server1 server2 server3; do scp somefile $HOST:~/somedir/ done 

试着用一个期望的脚本做这个例如

 #!/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 

以上应该相当简单,以适应您的要求。

我用'sshpt'也有类似的情况。 SSH Power Tool(sshpt)使您能够执行命令并通过SSH同时将file upload到多台服务器,而无需使用预共享密钥。 上传的文件和命令可以直接执行或通过sudo执行。