Você tem:
egrep... | while read ...; do
...
... ssh $IP exit...
...
done
ssh conecta-se ao host remoto e executa o comando remoto e envia o que lê de seu stdin (a menos que tenha passado a opção -n )
Nesse caso, o stdin de ssh é o canal de egrep , o mesmo canal read está lendo.
Portanto, ele normalmente lerá toda a saída de egrep e a enviará para o comando exit em $IP (o shell remoto ou exit não o lê, mas ssh terá lido isso.
nc é outro comando que lê seu stdin para enviar a conexão que ele estabelece, mas não quando passou a opção -z como você faz aqui.
Para evitar o problema, use a opção -n para ssh ou redirecione o status de ssh de /dev/null ( ssh < /dev/null... ).