为什么ssh中止我的bash脚本?

时间:2013-10-25 13:38:44

标签: bash ssh while-loop return-code

我正在自动将auth密钥上传到多个ssh主机,并且我希望每次执行脚本时都避免将密钥添加到authorized_keys,因此我检查ssh是否可以在上传密钥之前连接密钥身份验证。

问题是脚本在用户已有密钥的第一台服务器上停止循环。

该脚本根据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

输出:

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

servers.txt:

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

我的脚本使用的ssh-uploadkeys脚本由Tero Karvinen编写:http://terokarvinen.com/ssh-uploadkeys.html

1 个答案:

答案 0 :(得分:1)

-n选项添加到ssh以防止它从标准输入读取。发生的事情是ssh正在使用您的servers.txt文件,因此while循环在第一行之后终止,因为它没有任何内容可供阅读。