Question

I'm automating auth key uploads to several ssh hosts and I want to avoid adding the key to authorized_keys every time the script is executed, so I check if ssh can connect with key authentication before uploading the key.

Problem is that the script stops its loop on the first server the user already has a key in.

The script tries out key authentication based on advice from bash/ssh test for public key authentication

while read SERVER; do
    CONN="$USER@$SERVER"
    echo "$CONN: "
    ssh -q -o "BatchMode yes" $CONN 'true'
    RC=$?

    if [[ $RC -ne 0 ]]
    then
        echo "key auth did not succeed, trying to uploading key:"
        ../ssh-uploadkeys/ssh-uploadkeys $CONN
    else
        echo "key auth ok, no need to upload key"
    fi
done < servers.txt

This outputs:

myusername@the.host.com: 
key auth ok, no need to upload key

The servers.txt:

the.host.com
another.host.com
the.ghost.com

The ssh-uploadkeys script that my script uses is written by Tero Karvinen: http://terokarvinen.com/ssh-uploadkeys.html

Was it helpful?

Solution

Add the -n option to ssh to prevent it reading from stdin. What is happening is that ssh is consuming your servers.txt file, so the while loop terminates after the first line because there is nothing left for it to read.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top