Softpedia
 

NEWS CATEGORIES:



NEWS ARCHIVE >>
SOFTPEDIA REVIEWS >>
MEET THE EDITORS >>
Home > News > Linux > Other Tips, Tricks and Tutorials

October 24th, 2006, 12:10 GMT · By Mihai Marinof

How to Use RSA Key for SSH Authentication

SHARE:

Adjust text size:


If your daily activity requires loging in a lot of Linux systems through SSH, you will be happy to know (if you don't already) that there's a way to allow secure, authenticated remote access, file transfer, and command execution without having to remember passwords for each individual host you connect.

The $HOME/.ssh/authorized_keys file contains the RSA keys allowed for RSA authentication. Each line contains one key, which consists of the following fields: options, bits, exponent, modulus and comment. The first field is optional, bits, exponent and modulus fields give the RSA key and the last field isn't used at all in the authentication process, but it will be somewhat convenient to the user, for instance to know which key is for which machine.

Before we start, make sure your computer has a ssh client installed and the remote Linux system has ssh installed and sshd running, with RSA authentication enabled (RSAAuthentication yes in /etc/ssh/sshd_config).

First, you will need to generate the local RSA key:

# ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

(It's safe to press enter here, as the /root/.ssh is the default and recommended directory to hold the RSA file.)

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

(The password you enter here will need to be entered every time you use the RSA key but fortunately, you can set NO passphrase by pressing Enter. However, the upside is that you only have to remember this one passphrase for all the systems you access via RSA authentication and you can change the passhrase later with "ssh-keygen -p".)

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.


Once the public key has been generated, it's time to upload it on any Linux systems you usually log into. It's recommended you use scp as the file transfer utility:

# scp .ssh/id_rsa.pub username@hostname.com:~

This command will copy the id_rsa.pub file in the $HOME directory. For instance, if you used root as the username, the file will be found in the /root directory and if you used a normal user, the file will be in the /home/that.user/ directory.

Next, connect to the remote host through SSH, with the username you used in the step above. RSA authentication won't be available just yet, so you'll have to use the old method to login. Once you are connected, add the new hostkey to the file /root/.ssh/authorized_keys or /home/user/.ssh/authorized_keys. If the .ssh directory doesn't exist, create it.

# cd $HOME
# cat id_rsa.pub >> .ssh/authorized_keys


The two right-angles will add the contents of id_rsa.pub file to the authorized_keys file, so in case the file already exists, you won't have to worry about the existing content being modified.

You are all set. To test the RSA authentication, initiate a ssh connection from your PC to one of the Linux systems:

# ssh username@remote.hostname.com

If everything worked out well, you should be either asked for the passpharase (if you entered one), or get directly logged in. If you are prompted for the ssh password or get an error message, retry the above command using -v in order to turn verbose mode on and to be able to track down and correct the problem.

TELL US WHAT YOU THINK:

166,788 hits · 15 comments · Link to this article · Print article · Send to friend · Subscribe to news

MUST-READ RELATED ARTICLES:


How to Install XGL on Fedora Core

Fedora Desktop Customization

Fedora Core 5 Installation Guide

Debian Installation Guide

Installing A Linux Distro to An USB Drive

READER COMMENTS:


Comment #1 by: Matthias Nott on 22 Oct 2008, 08:32 UTC reply to this comment

You should also set 600 as file permissions, so on the target host, chmod 600 ~/.ssh/authorized_keys - otherwise you'd get an error.

HTH,

M


Comment #2 by: Rajeswari on 02 Apr 2009, 12:03 UTC reply to this comment

This has solved my problems. It works great


Comment #3 by: Puddinghead on 16 Jul 2009, 21:57 UTC reply to this comment

What if you have different IDs on the two boxes?


Comment #4 by: valinoce on 13 Oct 2009, 05:28 UTC reply to this comment

in my novice knowledge you got to change the setting of host name of rsa-keys ... appropriately .. not sure sorry..


Comment #5 by: Not A Linux Guy sorry :) on 05 Jan 2010, 02:30 UTC reply to this comment

I used the putty keygen...
I had to copy and paste public line from the ppk file and match the format. Not as easy as described above but it got me there none-the-less.


Comment #6 by: Niloy on 04 Feb 2010, 05:52 UTC reply to this comment

Thanks, it solved my problem ^_^ .


Comment #7 by: paul on 10 Sep 2010, 11:11 UTC reply to this comment

I've found that this won't work if you have too many permissions on your home directory on the target server. It needed to be chmod 700 . while in home

Comment #7.1 by: Prao on 19 Jan 2012, 19:26 GMT

Hi, This really helped.. I tried this process multiple times but was not able to generate the key... Thanks sooo much...


Comment #8 by: flakrat on 28 Jan 2011, 14:42 UTC reply to this comment

Newer distros provide the 'ssh-copy-id' command:

ssh-copy-id -i ~/.ssh/id_rsa.pub jdoe@somehost.org

This takes card of copying the public key to the remote host and adding it to the authorized_keys file and setting the appropriate permissions.


Comment #9 by: Hauge on 03 Feb 2011, 11:49 UTC reply to this comment

Did the above, but get a:

Permission denied (publickey,keyboard-interactive).

Comment #9.1 by: MikeR on 24 May 2011, 01:00 GMT

"ssh-copy-id" is simply there for laziness. Ultimately, what you have to achieve is ...

(1) Generate the key-file.
(2) Somehow get the key-file over to the right user-id on the right host.
(3) If that user doesn't already have an ".ssh" directory, create one AND set its permissions to "700." ("rwx------")
(4) If that user doesn't already have an ".ssh/authorized_keys" file, create one AND set its permissions to "600." ("rw-------")
(5) Append ... don't overwrite(!) ... the new key to that file.

As you can see, "ssh-copy-id" sure is easier.


Comment #10 by: rock on 12 May 2011, 09:40 UTC reply to this comment

thanks for sharing..this has helped me a lot.. :)


Comment #11 by: stranger on 06 Sep 2011, 12:21 UTC reply to this comment

simple and clear........


Comment #12 by: Sandesh on 07 Sep 2011, 05:15 UTC reply to this comment

Wow. It worked. /var/log/secure helped me finding out the actual problem. Thanks A Ton.


Comment #13 by: Mukesh on 11 Oct 2011, 05:35 UTC reply to this comment

It is preety good. It did not copy file, it appends so useful when we have group of Hosts interacting frequently.

Copyright © 2001-2012 Softpedia. Contact/Tip us at

WindowsGamesDriversMacLinuxScriptsMobileHandheldNews

SUBMIT PROGRAM   |   ADVERTISE   |   GET HELP   |   SEND US FEEDBACK   |   RSS FEEDS   |   UPDATE YOUR SOFTWARE   |   ROMANIAN FORUM