A certain series of events helps protect the integrity of an SSH
communication between two hosts.
First, a secure transport layer is created so
that the client knows that it is communicating with the correct
server. Then, the communication is encrypted between the client and
server using a symmetric cipher.
Next, with a secure connection to the server in place, the client
authenticates itself to the server without worrying that the
authentication information may be compromised. OpenSSH on Red Hat Linux uses DSA
or RSA keys and version 2.0 of the SSH protocol for authentication by
default.
Finally, with the client authenticated to the server, several different
services can be safely and securely used through the connection, such as
an interactive shell session, X11 applications, and tunneled TCP/IP ports.
The entire connection process occurs with very little extra work
required on the local system. In fact, in many respects, SSH works well
because it is familiar to users who are accustomed to less secure
connection methods.
In the following example, user1 on the client system is initiating an SSH
connection to a server. The server's IP address is 10.0.0.2, but its
domain name could be used instead. The login name of user1 on the server
is user2. The ssh command is written as follows:
[user1@machine1 user1]$ ssh user2@10.0.0.2 |
The OpenSSH client will request the user's private key
passphrase to decrypt the private key, which is used to perform
authentication. However, the private key passphrase is not sent across the
now secure connection between the client and server. Instead, the
passphrase is used to unlock the id_dsa file and
generate a signature, which it then sends to the server. If the server
has a copy of the user's public key which can be used to verify the
signature, the user is authenticated.
In this example, the user is using a DSA key (RSA keys, among many
others, can also be used) and sees the following prompt:
Enter passphrase for DSA key '/home/user1/.ssh/id_dsa': |
If the public key authentication fails for whatever reason (perhaps the
passphrase is entered incorrectly or the authentication information does
not already exist on the server), another type of authentication is
usually attempted. In our example, the OpenSSH server allows user1 to be
authenticated using user2's password because the signature sent did not
match a public key stored by user2:
user2@machine2's password: |
With a correctly entered password, the user is given a shell prompt. Of
course, user2 must already have an account on the 10.0.0.2 machine for
password authentication to work.
Last login: Mon Apr 15 13:27:43 2001 from machine1
[user2@machine2 user2]$ |
At this point, the user can interact with the shell in the same way as they
might do with telnet or rsh,
except that the communication is encrypted.
Other SSH tools, scp and sftp,
work in a similar way as the insecure rcp and
ftp, respectively. See the Official Red Hat Linux Customization Guide for
instructions and examples for using these and other SSH commands.