Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have to copy a file to different servers almost every day. What I usually do is:

scp filename user@destinationhost:/destination/folder

I run this same command changing the destination host over and over again until I finish all the servers. What is the best (and fastest) way to transfer the same file to those different servers?

Another drawback is that I need to enter the password over and over again, but using rsa is not an option since several people can connect to the source server.

Edit - I found loop in commandlinefu that may do the trick:

 for h in host1 host2 host3 host4 ; { scp file user@$h:/destination_path/ ; }
share|improve this question
Do you have expect on the system ? – Iain May 15 '12 at 21:02
@lain Yes, expect is installed. – Ruben Ploneda May 15 '12 at 21:07
up vote 3 down vote accepted

There are various tools which can scp files to multiple hosts (with simultaneous connections), like pssh and kanif. In terms of passwords I would suggest using agent forwarding. This allows you to keep the key on your local machine, but use it when initiating SSH connections from another host. Otherwise, the --askpass option to the parallel-scp command from pssh makes it prompt for a password to use for every host.

If you can't install a tool to do this, setup agent forwarding (by adding the -A option to ssh when connecting to the machine you're doing this on) and then run scp in a loop like so:

for HOST in server1 server2 server3; do
    scp somefile $HOST:~/somedir/
share|improve this answer
pssh is not installed in the server and I can't run applications that weren't provided by the sysadmin team. – Ruben Ploneda May 15 '12 at 21:00
@RubenPloneda, but it does sound like you have a valid reason for that tool. You should at least consider it, and forward your request to your sysadmin team to get that installed. – Zoredache May 15 '12 at 21:01
Then you'll have to use SSH agent forwarding and a bash loop (see answer). – mgorven May 15 '12 at 21:05

Try doing this with an expect script e.g.


HOSTS="h1.lan h2.lan h3.lan"

read -p "Password: " PASSWORD

for HOST in $HOSTS
    expect -c "
    spawn /usr/bin/scp file user@$HOST:/destination_path/
    expect {
    "*password:*" { send $PASSWORD\r;interact }

The above should be fairly straight forward to adapt to your requirements.

share|improve this answer

I used 'sshpt' for a similar situation. The SSH Power Tool (sshpt) enables you to execute commands and upload files to many servers simultaneously via SSH without using pre-shared keys. Uploaded files and commands can be executed directly or via sudo.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.