M3 has no SSH server, so M3->M1 and M3->M2 are not possible.
eh? It is the client which initiates the connection so I would generally write the relationship as client->server.
If there is no server in the middle then the obvious thing to try is to run rsync in the middle on M3 with a remote src and a remote dest (did you?). Unfortunately rsync can't cope with both ends remote. But you can set up a tunnel from M3 connecting to with either end then point rsync at the tuneeltunnel from the other end...
userm3@m3 $ ssh -L 2222:m2:22 userm2@m2 Then you can access m2 from m1 via m3:
userm1@m1 $ ssh -p 2222 userm2@m3 (but your authorized keys and any host specific keypairs will be confused by this)