Here is a quick script I created to automate copying a ssh key to multiple remote servers.
Basic command – the command uses sshpass to upload the ssh key to a remote server, this allows you to execute the command and not have to enter in a password to authenticate.
sshpass -p password ssh-copy-id -o StrictHostKeyChecking=no admin@remotehost
Script
#!/bin/bash remotehosts="$1" username="admin" password="MyCoolPassword123" for host in `cat ${remotehosts}` do sshpass -p${password} ssh-copy-id -o StrictHostKeyChecking=no ${username}@${host} echo "Uploaded key to " ${host} done echo "Finished!"
Using the script
- Download here.
- Make it executable
chmod +x sshcopy.sh
- Edit the script and change the username and password.
- Create a file that contains each host’s IP address or hostname.
- Run script (change hostlist.txt to your host list you created in step 3.)
./sshcopy.sh hostlist.txt
- Wait for the script to finish.
Example:
wget www.incredigeek.com/home/downloads/SSHCopy/sshcopy.sh chmod +x sshcopy.sh sed -i s/admin/bob/g sshcopy.sh <-- Change username - you can just manually edit the file, sed -i s/MyCoolPassword123/password/g sshcopy.sh <-- Change password - it might be easier than using sed echo "192.168.1.100" >> host.txt <-- Add 192.168.1.100 to the host list echo "Bob" >> host.txt <-- Add hostname bob to host list ./sshcopy.sh host.txt <-- Upload ssh key to all host's in the host file i.e. "bob" and "192.168.1.100"