I have no experience with teamviewer, as I don't like third parties to have access to my data.
But if you have a computer available that is always on (or at least when you want to access your plug) and it either directly accessible or you have control over the NAT router, you can use some ssh tunneling magic. Let's call this computer 'middleman'.
sheeva# ssh -R 2222:localhost:22 user@middleman
(Leave this running all the time. This opens a tunnel from middleman port 2222 to sheeva 22 (ssh port).
If you want to access your plug:
client# ssh -L 2222:localhost:2222 user@middleman
(This opens a tunnel from your client port 2222 to middleman port 2222.)
Now you can ssh into your plug:
client# ssh -p 2222 user@localhost
(Where 'user' is the username on your plug.)
Port 2222 is just some arbitrary number. Actually it's two arbitrary numbers as you could put the second tunnel on a different port.
The second tunnel is necessary as ssh is configured to only permit access to ssh tunnels from localhost. If you configure your middleman server to permit remote computers to access ssh tunnel you can skip the second step and ssh directly into your plug:
client# ssh -p 2222 user@middleman
(Where 'user' is again the username of your plug.)
But getting your ssh-daemon on middleman to allow this is not trivial IIRC. I tried this once although I don't remember which direction I wanted to tunnel and at least on Debian I would have had to recompile ssh.
Another possibility is to use 'grunt' or something similar if your plug is receiving emails. (See http://www.debian-administration.org/articles/515