1

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

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

该脚本根据来自 bash/ssh 测试的建议尝试密钥身份验证以进行公钥身份验证

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

服务器.txt:

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

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

4

1 回答 1

1

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

于 2013-10-25T14:13:00.790 回答