SSHD Server and The SSH Client
SSHD Server and The SSH Client
47
5.1.2. /etc/ssh/
Configuration of ssh client and server is done in the /etc/ssh directory. In the next sections
we will discuss most of the files found in /etc/ssh/.
48
Imagine Alice and Bob, two people that like to communicate with each other. Using public
and private keys they can communicate with encryption and with authentication.
When Alice wants to send an encrypted message to Bob, she uses the public key of Bob.
Bob shares his public key with Alice, but keeps his private key private! Since Bob is the
only one to have Bob's private key, Alice is sure that Bob is the only one that can read the
encrypted message.
When Bob wants to verify that the message came from Alice, Bob uses the public key of
Alice to verify that Alice signed the message with her private key. Since Alice is the only
one to have Alice's private key, Bob is sure the message came from Alice.
49
As you can see, the user paul is presented with an rsa authentication fingerprint from the
remote system. The user can accepts this bu typing yes. We will see later that an entry will
be added to the ~/.ssh/known_hosts file.
paul@ubu1204:~$ ssh [email protected]
The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established.
RSA key fingerprint is b5:fb:3c:53:50:b4:ab:81:f3:cd:2e:bb:ba:44:d3:75.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.30' (RSA) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-26-generic-pae i686)
* Documentation:
https://help.ubuntu.com/
The user can get log out of the remote server by typing exit or by using Ctrl-d.
admin42@ubuserver:~$ exit
logout
Connection to 192.168.1.30 closed.
paul@ubu1204:~$
50
5.4. scp
The scp command works just like cp, but allows the source and destination of the copy to
be behind ssh. Here is an example where we copy the /etc/hosts file from the remote server
to the home directory of user paul.
paul@ubu1204:~$ scp [email protected]:/etc/hosts /home/paul/serverhosts
[email protected]'s password:
hosts
100% 809
0.8KB/s
00:00
51
5.5.1. ssh-keygen
The example below shows how Alice uses ssh-keygen to generate a key pair. Alice does
not enter a passphrase.
[alice@RHEL5 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alice/.ssh/id_rsa):
Created directory '/home/alice/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/alice/.ssh/id_rsa.
Your public key has been saved in /home/alice/.ssh/id_rsa.pub.
The key fingerprint is:
9b:ac:ac:56:c2:98:e5:d9:18:c4:2a:51:72:bb:45:eb alice@RHEL5
[alice@RHEL5 ~]$
5.5.2. ~/.ssh
While ssh-keygen generates a public and a private key, it will also create a hidden .ssh
directory with proper permissions. If you create the .ssh directory manually, then you need
to chmod 700 it! Otherwise ssh will refuse to use the keys (world readable private keys are
not secure!).
As you can see, the .ssh directory is secure in Alice's home directory.
[alice@RHEL5 ~]$ ls -ld .ssh
drwx------ 2 alice alice 4096 May
[alice@RHEL5 ~]$
1 07:38 .ssh
Bob is using Ubuntu at home. He decides to manually create the .ssh directory, so he needs
to manually secure it.
bob@laika:~$
bob@laika:~$
drwxr-xr-x 2
bob@laika:~$
bob@laika:~$
mkdir .ssh
ls -ld .ssh
bob bob 4096 2008-05-14 16:53 .ssh
chmod 700 .ssh/
1 07:38 id_rsa
1 07:38 id_rsa.pub
The files will be named id_dsa and id_dsa.pub when using dsa instead of rsa.
Be careful when copying a second key! Do not overwrite the first key, instead append the
key to the same ~/.ssh/authorized_keys file!
cat id_rsa.pub >> ~/.ssh/authorized_keys
5.5.5. authorized_keys
In your ~/.ssh directory, you can create a file called authorized_keys. This file can contain
one or more public keys from people you trust. Those trusted people can use their private
keys to prove their identity and gain access to your account via ssh (without password). The
example shows Bob's authorized_keys file containing the public key of Alice.
bob@laika:~$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApCQ9xzyLzJes1sR+hPyqW2vyzt1D4zTLqk\
MDWBR4mMFuUZD/O583I3Lg/Q+JIq0RSksNzaL/BNLDou1jMpBe2Dmf/u22u4KmqlJBfDhe\
yTmGSBzeNYCYRSMq78CT9l9a+y6x/shucwhaILsy8A2XfJ9VCggkVtu7XlWFDL2cum08/0\
mRFwVrfc/uPsAn5XkkTscl4g21mQbnp9wJC40pGSJXXMuFOk8MgCb5ieSnpKFniAKM+tEo\
/vjDGSi3F/bxu691jscrU0VUdIoOSo98HUfEf7jKBRikxGAC7I4HLa+/zX73OIvRFAb2hv\
tUhn6RHrBtUJUjbSGiYeFTLDfcTQ== alice@RHEL5
54
5.8. sshd
The ssh server is called sshd and is provided by the openssh-server package.
root@ubu1204~# dpkg -l openssh-server | tail -1
ii openssh-server
1:5.9p1-5ubuntu1
secure shell (SSH) server,...
-l /etc/ssh/ssh_host_*
root 668 Jun 7 2011
root 598 Jun 7 2011
root 1679 Jun 7 2011
root 390 Jun 7 2011
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
5.10. ssh-agent
When generating keys with ssh-keygen, you have the option to enter a passphrase to protect
access to the keys. To avoid having to type this passphrase every time, you can add the key
to ssh-agent using ssh-add.
Most Linux distributions will start the ssh-agent automatically when you log on.
root@ubu1204~# ps -ef | grep ssh-agent
paul
2405 2365 0 08:13 ?
00:00:00 /usr/bin/ssh-agent...
This clipped screenshot shows how to use ssh-add to list the keys that are currently added
to the ssh-agent
paul@debian5:~$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvgI+Vx5UrIsusZPl8da8URHGsxG7yivv3/\
...
wMGqa48Kelwom8TGb4Sgcwpp/VO/ldA5m+BGCw== paul@deb503
55
56
2. Verify in the ssh configuration files that only protocol version 2 is allowed.
grep Protocol /etc/ssh/ssh*_config
3. Use ssh to log on to the server, show your current directory and then exit the server.
user@client$ ssh user@server-ip-address
user@server$ pwd
/home/user
user@server$ exit
6. (optional, only works when you have a graphical install of Linux) Install the xeyes package
on the server and use ssh to run xeyes on the server, but display it on your client.
on the server:
apt-get install xeyes
on the client:
ssh -X user@server-ip
xeyes
7. (optional, same as previous) Create a bookmark in firefox, then quit firefox on client and
server. Use ssh -X to run firefox on your display, but on your neighbour's computer. Do you
see your neighbour's bookmark ?
8. Use ssh-keygen to create a key pair without passphrase. Setup passwordless ssh between
you and your neighbour. (or between your client and your server)
See solution in book "setting up passwordless ssh"
9. Verify that the permissions on the server key files are correct; world readable for the
public keys and only root access for the private keys.
ls -l /etc/ssh/ssh_host_*
11. (optional) Protect your keypair with a passphrase, then add this key to the ssh-agent
and test your passwordless ssh to the server.
57
man ssh-keygen
man ssh-agent
man ssh-add
58