So, if you just need to access by ssh for just some checks and so on, I think you can setup one of those free VPNs like proxpn.com
If you would like to have direct connectivity (for example for bandwith reasons) I have another proposal:
It's not so easy to set-up, but I think that the best solution is to use the ICE protocol (http://tools.ietf.org/html/rfc5245) for NAT traversal. It is used for establishing p2p connection on SIP for VoIP calls (also skype use it!), but actually you can use for anything else. It gives you a UDP tunnel between two peers and it works even if both the peers are behind NAT. The only case in which it does not work is when you can't use UDP or both peers are behind a symmetric-NAT (a kind of NAT used on some corporate networks). *Usually* ISP tries to follow some NAT requirements ( http://tools.ietf.org/html/rfc4787
) so that this kind of NAT traversal techniques works..
Few weeks ago I've created a tool based on libpjproject for doing a tunnel using ICE: https://github.com/Otacon22/icetunnel
the only thing is that you need some way for exchanging the SDP informations.
For example you could:
1. connect both peers to a free VPN
2. Connect to the home peer on ssh over the VPN
3. Start my icetunnel tool on both peers, copy SDP data and paste to the other host
4. Open a VPN over the UDP tunnel created by ICE
Sorry if the description is not so clear but I'm still developing it!
P.s: also the new WebRTC uses ICE!