It’s the nature of the API – ray.init starts Ray on a node of the cluster, ray.client().connect and ray.util.connect instantiates a client connection that allows communication with a server on the Ray head node.
In the near future, we’re planning to have ray.init instantiate a client connection if run remotely. (Then you’d get the expected behavior!) The Ray Client is relatively young, but we’re quickly transitioning it to become the standard mode of operation.