[8]RSA is an encryption algorithm for SSH keys, among other things. [Section 3.9.1, "Public-Key Algorithms"] DSA is another, as you'll see later.
$ ssh-keygen1
Initializing random number generator...
Generating p: ..................................++ (distance 1368)
Generating q: ....++ (distance 58)
Computing the keys...
Testing the keys...
Key generation complete.
Enter file in which to save the key (/home/pat/.ssh/identity):
Enter passphrase: **************
Enter the same passphrase again: **************
Your identification has been saved in identity.
Your public key is:
1024 35 11272721957877936880509167858732970485872567486703821636830\
1950099934876023218886571857276011133767701853088352661186539160906\
9214986989240214507621864063548908730298546478215446737245984456708\
9631066077107611074114663544313782992987840457273825436579285836220\
2493395730648451296601594344979290457421809236729 [email protected]
Your public key has been saved in identity.pub.
On SSH2 systems, the command is either ssh-keygen
or
ssh-keygen2,
and its behavior is a bit different and produces either a
DSA
key (the default) or an RSA key:
$ ssh-keygen2
Generating 1024-bit dsa key pair
1 ..oOo.oOo.oO
2 o.oOo.oOo.oO
3 o.oOo.oOo.oO
4 o.oOo.oOo.oO
Key generated.
1024-bit dsa, created by [email protected] Mon Mar 20 13:01:15 2000
Passphrase : **************
Again : **************
Private key saved to /home/pat/.ssh2/id_dsa_1024_a
Public key saved to /home/pat/.ssh2/id_dsa_1024_a.pub
The OpenSSH version of ssh-keygen also can produce
either RSA or DSA keys, defaulting to RSA. Its operation is similar
to that of ssh-keygen1.
Normally, ssh-keygen performs all necessary
mathematics to generate a key, but on some operating systems you
might be asked to assist it. Key generation requires some random
numbers, and if your operating system doesn't supply a
random-number generator, you may be asked to type some random text.
ssh-keygen uses the timings of your keystrokes to
initialize its internal random-number generator. On a 300-MHz Pentium
system running Linux, generating a 1024-bit RSA key takes about
three seconds; if your hardware is slower than this or heavily
loaded, generation may take significantly longer, up to a minute or
more. It can also take longer if the process runs out of random bits,
and ssh-keygen has to wait to collect more.
ssh-keygen then creates your local SSH directory
(~/.ssh for SSH1 and OpenSSH or
~/.ssh2 for SSH2) if it doesn't already
exist, and stores the private and public components of the generated
key in two files there. By default, their names are
identity and identity.pub
(SSH1, OpenSSH) or id_dsa_1024_a and
id_dsa_1024_a.pub (SSH2). SSH clients consider
these to be your default identity for authentication purposes.
WARNING: Never reveal your private key and passphrase to anyone else. They are just as sensitive as your login password. Anyone possessing them can log in as you!When created, the identity file is readable only by your account, and its contents are further protected by encrypting them with the passphrase you supplied during generation. We say "passphrase" instead of "password" both to differentiate it from a login password, and to stress that spaces and punctuation are allowed and encouraged. We recommend a passphrase at least 10 -15 characters long and not a grammatical sentence. ssh-keygen has numerous options for managing keys: changing the passphrase, choosing a different name for the key file, and so forth. [Section 6.2, "Creating an Identity"]
[9]OpenSSH uses authorized_keys2 for SSH-2 connections. For simplicity, we'll discuss OpenSSH later. [Section 8.2.3, "OpenSSH Authorization Files "]For SSH1 or OpenSSH, create or edit the file ~/.ssh/authorized_keys and append your public key, i.e., the contents of the identity.pub file you generated on the local machine. A typical authorized_keys file contains a list of public key data, one key per line. The example contains only two public keys, each on its own line of the file, but they are too long to fit on this page. The line breaks inside the long numbers are printing artifact; if they were actually in the file, it would be incorrectly formatted and wouldn't work:
These are RSA public keys: the first number in each entry is the number of bits in the key, while the second and third are RSA-specific parameters called the public exponent and modulus. After these comes an arbitrary amount of text treated as a comment. [Section 8.2.1, "SSH1 Authorization Files "] For SSH2, you need to edit two files, one on the client machine and one on the server machine. On the client machine, create or edit the file ~/.ssh2/identification and insert a line to identify your private key file:1024 35 8697511247987525784866526224505474204292260357215616159982327587956883143 362147028876494426516682677550219425827002174890309672203219700937187777979705864 107549106608811204142046600066790196940691100768682518506600601481676686828742807 11088849408310989234142475694298520575977312478025518391 my personal key 1024 37 1140868200916227508775331982659387253607752793422843620910258618820621996 941824516069319525136671585267698112659690736259150374130846896838697083490981532 877352706061107257845462743793679411866715467672826112629198483320167783914580965 674001731023872042965273839192998250061795483568436433123392629 my work key
On the server machine, create or edit the file ~/.ssh2/authorization, which contains information about public keys, one per line. But unlike SSH1's authorized_keys file, which contains copies of the public keys, the authorization file lists only the filename of the key:IdKey id_dsa_1024_a
Finally, copy id_dsa_1024_a.pub from your local machine to the remote SSH2 server machine, placing it in ~/.ssh2. Regardless of which SSH implementation you use, make sure your remote SSH directory and associated files are writable only by your account:[10]Key id_dsa_1024_a.pub
[10]We make files world-readable and directories world-searchable, to avoid NFS problems. [Section 10.7.2, "NFS Access Problems"]
The SSH server is picky about file and directory permissions and may refuse authentication if the remote account's SSH configuration files have insecure permissions. [Section 5.4.2.1, "Acceptable permissions for user files"] You are now ready to use your new key to access the "pat" account:# SSH1, OpenSSH $ chmod 755 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys # OpenSSH only $ chmod 644 ~/.ssh/authorized_keys2 # SSH2 only $ chmod 755 ~/.ssh2 $ chmod 644 ~/.ssh2/id_dsa_1024_a.pub $ chmod 644 ~/.ssh2/authorization
# SSH1, SSH2, OpenSSH; output shown is for SSH1
$ ssh -l pat shell.isp.com
Enter passphrase for RSA key 'Your Name <[email protected]>': ************
Last login: Mon May 24 19:44:21 1999 from quincunx.nefertiti.org
You have new mail.
shell.isp.com>
If all goes well, you are logged into the remote account. Figure 2-2 shows the entire process.
2.3. Adding Complexity to the Example | 2.5. The SSH Agent |
Copyright © 2002 O'Reilly & Associates. All rights reserved.