#!/bin/bash
# -----------------------------------------------------------------------------
# Secures the ONOS console for all instances in the cell ONOS cluster.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

nodes=$(env | sort | egrep "OC[0-9]+" | cut -d= -f2)

for node in $nodes; do
    # Setup passwordless login for the remote user on the local bench host
    onos-user-key $node

    # Prune the node entry from the known hosts file since server key changes
    ssh-keygen -f "$HOME/.ssh/known_hosts" -R [$node]:8101

    # Setup passwordless login for the local user on the remote node
    ssh $ONOS_USER@$node "
        [ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q
        $ONOS_INSTALL_DIR/bin/onos-user-key \$(id -un) \$(cut -d\\  -f2 ~/.ssh/id_rsa.pub)
        $ONOS_INSTALL_DIR/bin/onos-secure-ssh "$@"

        # Implicitly accept the new server key in dev/test environments
        while ! ssh -p 8101 -o StrictHostKeyChecking=no localhost list 2>/dev/null; do
            echo Waiting for connection...
            sleep 1
        done
    "
done

