Ssh

From ICO wiki
Revision as of 14:42, 24 April 2010 by Rnurmla (talk | contribs)
Jump to navigationJump to search

Secure shell

Autor

Ragnar Nurmla
AK32

Olemus

Secure Shell või lihtsalt SSH on võrguprotokoll mis võimaldab andmete vahetust võrguseadmete vahel üle turvalise kanali. SSH loodi asendamaks ebaturvalisi kaughaldus vahendeid, näiteks telnet, kuna need saadavad andmeid krüpteerimata kujul üle võrgu. Tänu SSH krüpteerimisele saab andmeid saata üle ebaturvalise võrgu, näiteks Internet ja säilib andmete konfidentsiaalsus ning terviklikkus. SSH on kasutuses peamiselt GNU/Linux ja Unix süsteemides, võimaldades eemalt logida kasutaja kestale (shell). Turvalisus põhineb avaliku ja salajase võtme ehk asümmeetrilisel krüptograafial. SSH kasutab klient-server mudelit.

Kasutusvaldkonnad

  • Shellile logimine (telneti asendus)
  • Korralduse täitmine eemalseisvas masinas
  • Turvaline failide kopeerimine kohalikust masinast teise (scp)
  • X11 edastus eemalseisvast masinast

Paigaldamine

Kasutades apt pakihalduse vahendit saab SSH-d paigaldada käsuga:

sudo apt-get install ssh

Mille tulemusena paigaldadakse meie arvutisse openssh-server ja ssh, scp, sftp. Esimene on ssh server mis kuulab vaikimis pordil 22 ja teised kolm on kliendid eemalseisvasse masinasse logimiseks ja failide kopeerimiseks.

Kontrollime kas ssh server läks tööle ja kuulab pordil:

netstat -tnlp
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2359/sshd

Tundub, et õnnestus.

Kasutamine

ssh

Kõige lihtsam viis ssh-d kasutada on ühenduse loomine eemalseisvasse masinasse, selleks anname käsu

ahven@pingviinike:~$ ssh www

Kui me loome ühendust esimest korda kasutaja ahven alt masinasse nimega www, siis kuvatakse meile järgmine tekst:

The authenticity of host 'www (10.59.1.84)' can't be established.
RSA key fingerprint is a2:35:41:54:05:37:b4:e9:69:5f:19:d3:87:74:e4:1a.
Are you sure you want to continue connecting (yes/no)? yes

Kui oleme kindlad, et just see masin on see kuhu me ühendust tahame luua kirjutame yes. Mis järel luuakse meie kodukataloogi kaust .ssh ning selle sisse fail known_hosts, mille sisse kirjutatakse serveri avalik võti.

Warning: Permanently added 'www,10.59.1.84' (RSA) to the list of known hosts.

Ning seejärel küsitakse parooli:

ahven@www's password:

Ning kui parool on õige, olemegi loonud turvalise ühenduse masinasse nimega www

ahven@www:~$

Ühenduse lõpetaatakse käsuga exit

ahven@www:~$ exit
logout
Connection to www closed.
ahven@pingviinike:~$

Kui tahame luua ühendust mõne teise kasutajanimega peame kasutama võtit l millele järgi anda kasutajanimi:

ahven@pingviinike:~$ ssh -l rax www
rax@www's password:

Nüüd küsitakse juba kasutaja rax parooli. Sama asja teeb ka selline käsk:

ahven@pingviinike:~$ ssh rax@www
rax@www's password:

scp

SCP on üks osa SSH pakist. See võimaldab turvaliselt kopeerida faile ühest masinast teise üle võrgu.
SCP kasutamine võiks välja näha nii:

root@pingviinike:~# scp tainas.txt rax@www:/home/rax/
rax@www's password:
tainas.txt                                                           100%    0     0.0KB/s   00:00
root@pingviinike:~#

Kohalikus masinas olev fail tainas.txt kopeeritakse kasutaja rax õigustega masinasse nimega www kausta /home/rax
Loomulikult on võimalik teha ka vastupidi:

root@pingviinike:~# scp rax@www:/home/rax/tainas.txt /root
rax@www's password:
tainas.txt                                                            100%    0     0.0KB/s   00:00
root@pingviinike:~#

Remote maisnast www kaustast /home/rax kopeeritakse fail tainas.txt kohaliku masina /root kausta.

sftp

Alternatiiv SCP kasutamisele on kasutada SFTP-d. SFTP-ga saab ühenduda masinatesse kus "jookseb" ssh server (sshd). Ühendus luuakse nagu hariliku FTP kliendiga ainult krüpteeritult. Kasutaja liides on ka nagu FTP oma, saab kasutada käske nagu näiteks ls, cd, get, put jne.
Kasutamine:

root@pingviinike:~# sftp rax@www
Connecting to www...
rax@www's password:
sftp>

Selle tulemusena tegime SFTP ühenduse masinasse www kasutaja rax kodukataloogi.

Liigutame faile ka:

sftp> put /root/oinas.txt
Uploading /root/oinas.txt to /home/rax/oinas.txt
/root/oinas.txt                                                                               100%    0     0.0KB/s   00:00
sftp>

Selle tulmusena laadisime kohalikust masina /root kataloogist faili oinas.txt remote masina kausta /home/rax
Kontrollime kas on ikka nii:

sftp> ls -l
-rw-r--r--    1 rax      rax             0 Apr 24 15:33 oinas.txt
-rw-r--r--    1 rax      rax             0 Apr 24 15:11 tainas.txt
sftp>

Tõesti fail oinas.txt on olemas.

X edastus

SSH serveri seadistus

Paroolita autentimine

Kui on vaja pidevalt teha ühedusi mingisse kindlasse masinasse või kui on loodud varunduse lahendus üle ssh siis on mugav kasutada ssh autentimist ilma paroolita.

Esmalt kontrollime kas kasutaja kodukaustas, kelle nimega tahame autentida, on olemas kaust .ssh:

[rax@fjoodor ~]$ ssh rax@www ls -la
rax@www's password: 
total 24
drwxr-xr-x 2 rax  rax  4096 2010-03-13 12:51 .
drwxr-xr-x 5 root root 4096 2010-04-17 10:42 ..
-rw------- 1 rax  rax    47 2010-04-17 11:07 .bash_history
-rw-r--r-- 1 rax  rax   220 2010-02-26 11:40 .bash_logout
-rw-r--r-- 1 rax  rax  3116 2010-02-26 11:40 .bashrc
-rw-r--r-- 1 rax  rax   675 2010-02-26 11:40 .profile
[rax@fjoodor ~]$

Kuna .ssh kausta pole siis tekitame selle sinna:

ssh rax@www mkdir .ssh
rax@www's password: 
[rax@fjoodor ~]$

Ning kontrollime nüüd:

[rax@fjoodor ~]$ ssh rax@www ls -la
rax@www's password: 
total 28
drwxr-xr-x 3 rax  rax  4096 2010-04-24 10:21 .
drwxr-xr-x 5 root root 4096 2010-04-17 10:42 ..
-rw------- 1 rax  rax    47 2010-04-17 11:07 .bash_history
-rw-r--r-- 1 rax  rax   220 2010-02-26 11:40 .bash_logout
-rw-r--r-- 1 rax  rax  3116 2010-02-26 11:40 .bashrc
-rw-r--r-- 1 rax  rax   675 2010-02-26 11:40 .profile
drwxr-xr-x 2 rax  rax  4096 2010-04-24 10:21 .ssh
[rax@fjoodor ~]$

Täitsa olemas! Turvalisuse huvides peaksime tegema selle kausta ligipääsetavaks vaid selle omanikule. Selleks anname käsu:

[rax@fjoodor ~]$ ssh rax@www chmod 700 .ssh
rax@www's password: 
[rax@fjoodor ~]$

Nüüd genereerime avaliku ja salajase võtme. Seda teeme käsuga:

[rax@fjoodor ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/rax/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/rax/.ssh/id_dsa.
Your public key has been saved in /home/rax/.ssh/id_dsa.pub.
The key fingerprint is:
5c:b6:df:53:e9:0f:ce:c4:4c:2d:92:71:aa:78:b1:e0 rax@fjoodor
The key's randomart image is:
+--[ DSA 1024]----+
|                 |
|                 |
|          o . .  |
|       . o . = ..|
|        S o + o.o|
|       . o = *.o |
|        E + . B. |
|         .   + o.|
|              o .|
+-----------------+
[rax@fjoodor ~]$

-t võtmega ütleme krüpteerimis algoritmi, mis antud näites on dsa. Seejärel küsitakse kuhu kausta genereeritud võtmed pannakse, milleks vaikimisi on meie kodukaustas asuv .ssh nimeline kaust. Järgmisena pakutakse võimalust võtmele veel parool peale panna, kuna meie eesmärk on paroolita autentimine siis lähme sealt lihtsalt klahvi enter vajutades edasi ning ongi võtmed olemas.

[rax@fjoodor ~]$ ls -l .ssh/
total 16
-rw------- 1 rax rax  668 2010-04-24 10:30 id_dsa
-rw-r--r-- 1 rax rax  601 2010-04-24 10:30 id_dsa.pub
-rw-r--r-- 1 rax rax  398 2010-04-24 10:16 known_hosts
[rax@fjoodor ~]$

Nüüd peame toimetama avaliku võtme turvalist teed pidi masinasse kuhu tahame ühendust luua. Eesmärk on meie genereeritud avalik võti paigutada masina www kasutaja rax kodukasutas olevasse faili authorized_keys mis asub kataloogis .ssh. Seda püüame saavutada nii:

[rax@fjoodor ~]$ cat .ssh/id_dsa.pub | ssh rax@www 'cat >> .ssh/authorized_keys'
rax@www's password:

Selle tulemusena lisama äsja genereeritud avaliku võtme faili .ssh/authorized_keys, oluline on just lisada mitte seda faili üle kirjutada kuna seal võib ees juba olla mõne teise masina avalik võti. Kui nüüd viga ei tekkinud siis võib eeldada et kõik õnnestus ja meie eesmärk on täidetud. Kontrollime:

[rax@fjoodor ~]$ ssh rax@www
Linux www 2.6.26-2-686 #1 SMP Wed Feb 10 08:59:21 UTC 2010 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Apr 24 10:46:32 2010 from pingviinike.lan
rax@www:~$

Jah tõesti meie käest ei küsitud enam autentimiseks parooli.