Capistrano isn't responsible for pushing code (in the sense of pushing changes to SCM) you still do this with Git, or your other choice of SCM.
Capistrano by default will log onto the servers named in your "roles" and pull the code down from your source control, to each server individually.
If you have 10 servers, and they are all web servers, you would name them all in the web
role in Capistrano.
There are excellent Github guides for more information, but in short, yes; it's expected that you have ssh keys setup for a) logging on to the servers as your deploy
user, and b) for your server to reach the source control (often referred to as deploy keys.)
@Arthur's suggestion about capistrano multistage is useful only when deploying to multiple environments, such as "staging" and "production" where the procedure is the same, but the server list is different.