I'm trying to read a file with the names of approx 500 server names on their own individual lines, and then for each of those, ssh in and append the roots authorized_keys file for each. I keep getting errors each time I run the script and/or modify it. Can you please help me figure out what's wrong? My OS is Mac OS X:
#!/usr/bin/expect
set timeout 60
set SERVERS "cat /Users/macuser/server.lst"
set USER "myuser"
set MY_PASS "mypasswordhere"
for EACH in $SERVERS; do
cat /Users/macuser/.ssh/id_rsa.pub | ssh $USER@$EACH "tee -a .ssh/authorized_keys"
expect {
eof {break}
"The authenticity of host" {send "yes\r"}
"password:" {send "$MY_PASS\r"}
}
interact
done
here is the error:
wrong # args: should be "for start test next command"
while executing
"for EACH in $SERVERS"
(file "./keyssh_push.sh" line 7)
ssh-copy-idbe what you're looking for?ssh-copy-idis bundled in the OpenSSH package. What it does is exactly what you are trying to script. The only piece you would need to write is the expect where passing the password is done or use sshpass as suggested by graeme. See my comment in graeme's reply.