Suppose you have two machines: A and B. A is your work machine, you do most of your work on it. But B is a little special (e.g., connected to some specific hardware) that you need to ssh on it or copy some file from A to B from time to time. Here is the way that you can get rid of entering passwords every time you do ssh/scp.

First, on machine A, generate a DSA key pair:

$ ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (YOUR_HOME/.ssh/id_rsa):
# press ENTER here to accept the default filename 
Enter passphrase (empty for no passphrase): 
# press ENTER here to use no passphrase, otherwise, you still need
# to enter this passphrase when ssh 
Enter same passphrase again: 
# press ENTER here 
Your identification has been saved in $HOME/.ssh/id_rsa. 
Your public key has been saved in $HOME/.ssh/ 
The key fingerprint is: ..... (omited)

Then, change the access mode of .ssh directory

$ chmod 775 ~/.ssh 

Then append the content of your just generated to the $HOME/.ssh/authorized_keys file on machine B:

# copy the file to host B 
$ scp ~/.ssh/ b@B:. 
# login to B 
$ ssh b@B 
# append the content to authorized_keys 
$ cat >> .ssh/authorized_keys 

Finally, ssh on to B and change the access mode of the file authorized_keys. This is optional, maybe you don't need to do this if you can already ssh without entering password.

$ ssh b@B 
$ chmod 700 .ssh 
$ chmod 640 ~/.ssh/authorized_keys

Depend on your version of ssh, you may also need to do the following:

$ ssh b@B $ cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys2

That it! Enjoy!