Any machine you can reach via ssh you can clone or pull from and clone or push to. Mercurial imposes no extra restrictions, so if you can get a shell you can do transport.
My guess is you've just botched your URL syntax, but unless you provide the full text of your inputs and outputs there's not much we can do to help. In the general sense this is all you need to do:
On your local computer that can reach out but can't be reached from the outside and with your current working directory set to the parent of your local repository.
hg clone mylocalrepository ssh://you@remoteservername//absolute/path/on/remote/server
That takes your local repository (here named mylocalrepository
) and creates a clone on a server (here named remoteservername
) to which you're normally able to ssh (and get a real shell). Notice that there is a double-slash two times. That's requried to give an absolute path -- otherwise it's relative to your home directory on that machine.
If that doesn't do it for you please provide exactly the command you're running and the output you're getting along with examples of what does work to get a shell on that remote box.