• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer navigation

The Geek Diary

  • OS
    • Linux
    • CentOS/RHEL
    • Solaris
    • Oracle Linux
    • VCS
  • Interview Questions
  • Database
    • oracle
    • oracle 12c
    • ASM
    • mysql
    • MariaDB
  • DevOps
    • Docker
    • Shell Scripting
  • Big Data
    • Hadoop
    • Cloudera
    • Hortonworks HDP

How Passwordless SSH works in Linux / UNIX

by admin

SSH is a protocol to transfer data securely between different machines. The SSH protocol uses public key cryptography to allow the client to authenticate the server and if necessary to allow the server to authenticate the client without sending passwords back and forth.

Public Key Cryptography uses a public-private-key-pair. The private key is kept secret and is never transferred over the network. The public key may be distributed to all peers. Messages encrypted using the public key can only be decrypted with the private key.

At SSH connect time, the client receives the servers public key, and verifies if this matches the stored public key in $HOME/.ssh/known_hosts. If this test is successful, and the server does not have the clients public key, a password is required. Else, the server sends a message encrypted with the clients public key and if the client manages to decrypt the message successfully, using its private key, the connect is established.

There are two versions of the SSH protocol, version 1 and 2. The encryptions are tied to the protocol version.Version 1 suffers from security vulnerabilities, whenever possible, version 2 should be used. Most SSH-servers use version 2 of the protocol due to the limitations of version 1.

There are 2 algorithms for the encryption of public-private-key-pairs, RSA and DSA.

Client Setup

Protocol Type Commandline
Version 1 RSA1 -t rsa1
Version 2 RSA -t rsa
Version 2 DSA -t dsa

After determining which identity type you want/need, the first step is to generate a public-private-key-pair, and copy the public part into the appropriate place on the server side. In the user’s home directory, on the client machine, execute (you should have the directory $HOME/.ssh, if not create it):

# ssh-keygen -t dsa -f ~/.ssh/id_dsa 
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:Qmd9iBOzx02n4DvDiBwRoGbGGC12X9i41QtbBxznHZc root@geeklab
The key's randomart image is:
+---[DSA 1024]----+
|..  ..*.=o+......|
|.=.o o * %o*.ooE |
|o.B . * X O.+.   |
| +   = * * o     |
|      + S =      |
|       .   o     |
|                 |
|                 |
|                 |
+----[SHA256]-----+

Here,
-t – is used for the type of encryption.
-f – where to store the public/private key pairs. In this case, the .ssh directory on user home.

A passphrase will be asked after you execute the above command. Leave this part blank, just pressing [enter] if you do not want to type this passphrase at every connect. Alternatively, one could set up an ssh-agent to handle the passphrases.

The above command creates two files in ~/.ssh:

# ls -lrt ~/.ssh/id_dsa*
-rw-r--r--. 1 root root 602 Apr 12 14:45 /root/.ssh/id_dsa.pub
-rw-------. 1 root root 668 Apr 12 14:45 /root/.ssh/id_dsa

Server Setup

The file id_dsa.pub contains the client public key, which needs to be appended to the file $HOME/.ssh/authorized_keys on the server:

1. Copy the id_dsa.pub file to the server:

client$ scp ~/.ssh/id_dsa.pub user@server:~/.ssh/id_dsa.pub

Of course, this time you will need to enter the password for the user.

2. Now, log on the server machine and go to the .ssh directory on the server side

client$ ssh user@server
server$ cd .ssh

3. Now, add the client’s public key to the know public key list on the server:

server$ cat id_dsa.pub >> authorized_keys
server$ chmod 640 authorized_keys
server$ rm id_dsa.pub
server$ exit

that’s all.

Testing

To test if the passwordless ssh works, use the below syntax:

$ ssh -l [user] [server]
Last login: Tue Apr 12 15:20:07 2007 from 192.168.0.100

or alternatively

$ ssh [user]@[server]
Last login: Tue Oct 12 15:20:07 2007 from 192.168.0.100

If the system did not query you for a password everything is working properly.

Warning

Make sure that you keep your private key (~/.ssh/id_dsa) secret! While it is safe to give your public key (~/.ssh/id_dsa.pub) to the world, you should be extremely careful that nobody else can read your private key (~/.ssh/id_dsa). Everybody who has access to the private key can log in to any machine where the matching public key is installed.

Filed Under: Linux, Solaris

Some more articles you might also be interested in …

  1. lsb_release Command Examples in Linux
  2. kwrite Command Examples in Linux
  3. powerstat Command Examples in Linux
  4. How to Disable Docker Process and docker0 Interface on CentOS/RHEL
  5. telinit: command not found
  6. nping: command not found
  7. dirb Command Examples in Linux
  8. TIME_WAIT queue troubles
  9. How to copy directories recursively using rsync while excluding specific files
  10. CentOS / RHEL 6 : How to limit memory resources for a specific user using cgroups

You May Also Like

Primary Sidebar

Recent Posts

  • powertop Command Examples in Linux
  • powertop: command not found
  • powerstat: command not found
  • powerstat Command Examples in Linux

© 2023 · The Geek Diary

  • Archives
  • Contact Us
  • Copyright