At home I have a linux machine behind a router. How can I ssh it?
You need to do two things:
Set up a dynamic dns service. The dyndns.com service is free, and generally you can set this up in your router's configuration (ie, once you've set up an account at dyndns.com, many routers let you put in your account information and your router will update it automatically). This will let you do something like ssh mysshsite.dyndns.com (or whatever you sign up for), and you won't have to memorize your router's IP address (which is likely to change if you're using a residential service)
Set up port forwarding. SSH is configured to use port 22 by default, so set up your router to forward port 22 to your computer. If you don't know how to set up port forwarding, check your router's documentation - it's usually pretty easy.
You need to enable port forwarding for port 22 on your router. The details can depend on router model, so, unfortunately, I cannot give more specific instructions. You can check, for example, portforward.com, it has port forwarding howtos for many router models.
If you can't / don't want forward port 22 on you router, and have another machine on the Iternet, you could always do the ssh reverse tunnel: here