Search code examples
shellssharduinoarduino-yun

writing shell ssh script for uploading compiled sketch on multiple arduino yun in network


I work with a couple of arduino yuns and want to write a script to upload sketches on multiple of them. Let's assume I have a compiled arduino program:sketch.hex. Now I'd like to upload this file via LAN. For a single device it works like this.

Copying the sketch onto the device. (password required)

scp sketch.hex [email protected]:/tmp/sketch.hex

Opening an ssh session with the device. (password required)

ssh [email protected]

And then load the program onto the Atmega with the following 2 commands.

merge-sketch-with-bootloader.lua /tmp/sketch.hex
run-avrdude /tmp/sketch.hex

Now my question would be, how to do this for multiple arduinos (yun1,yun2,...,yunN) without entering actually ssh-ing into each single device in order to run the bottom 2 commands.

Hope the question is not too confusing and thanks a lot in advance.

Update: could figure it out myself. Here is the code in case someone needs it.

#!/bin/sh

#  globalUpload.sh
#  
#
#  Created by maggu on 21/02/16.
#
clear
FILENAME="valve_adjusting.hex"
SSHPASS="doghunter"
SSHCOMMAND="ssh -p 22 -T -o StrictHostKeyChecking=no -o BatchMode=no"
PREFIX="root@linino"
PREFIXO="linino"
SUFFIX=".local"
YUNS=8
for i in `seq 1 $YUNS`
do
SSHACCOUNT=$PREFIX$i$SUFFIX
ssh-keygen -R $PREFIXO$i$SUFFIX
sshpass -p "doghunter" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null sketch.hex $SSHACCOUNT:/tmp/sketch.hex
sshpass -p $SSHPASS $SSHCOMMAND $SSHACCOUNT << EOF_run_commands
merge-sketch-with-bootloader.lua /tmp/sketch.hex
run-avrdude /tmp/sketch.hex
EOF_run_commands
done

Solution

  • #!/bin/sh
    
    #  globalUpload.sh
    #  
    #
    #  Created by maggu on 21/02/16.
    #
    clear
    FILENAME="valve_adjusting.hex"
    SSHPASS="doghunter"
    SSHCOMMAND="ssh -p 22 -T -o StrictHostKeyChecking=no -o BatchMode=no"
    PREFIX="root@linino"
    PREFIXO="linino"
    SUFFIX=".local"
    YUNS=8
    for i in `seq 1 $YUNS`
    do
    SSHACCOUNT=$PREFIX$i$SUFFIX
    ssh-keygen -R $PREFIXO$i$SUFFIX
    sshpass -p "doghunter" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null sketch.hex $SSHACCOUNT:/tmp/sketch.hex
    sshpass -p $SSHPASS $SSHCOMMAND $SSHACCOUNT << EOF_run_commands
    merge-sketch-with-bootloader.lua /tmp/sketch.hex
    run-avrdude /tmp/sketch.hex
    EOF_run_commands
    done