Ssh: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Kkont (talk | contribs)
Kkont (talk | contribs)
Line 291: Line 291:
  $ ssh prod
  $ ssh prod


Nagu näitest on näha, peab kasutaja meelde jätma ainult tema poolt defineeritud hosti aliase ning kõik muu (port, kasutaja, tegelik host) on tema eest peidus.





Revision as of 12:49, 28 January 2017

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õpetatakse 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 anname kasutajanime:

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.

Xi akende edastus

Üle SSH kanali on võimalik ka graafilise keskkonna aknaid suunata, seda lihtsalt ja turvaliselt. Graafiliste programmide käivitamiseks teisest masinast (serverist) ei pea seal olema installeeritud terve graafiline keskkond (gnome, x-window-system) vaid piisab paketist xbase-clients (Debian, Ubuntu). Küll aga peab olema sinu masinas (klient masinas) installeeritud X server (graafiliste akende kuvaja). Samuti peaks kontrollima kas /etc/ssh/sshd_config failis on lubatud X11 edastus. Selleks on seal rida X11Forwarding mille väärtus peab olema yes (vaikimis on yes).

Teeme ühenduse kasutades -X võtit:

rax@pingviinike:~$ ssh -X rax@www

Olles loonud ühenduse saame nüüd eemalt masinast tõmmata käima meile vajalikke graafilise programme ja kuvada neid meie kohalikus masinas.

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 lisame ä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.

SSH konfiguratsioon fail

Kõik varasemad näited katavad stsenaariume kus kasutaja peab ühenduse loomiseks kasutama kasutajanime ning serveri hosti. Mis saab siis kui masinaid millega on vaja ühenduda on rohekm kui üks? Kui erinevad masinad kasutavad erinevaid võtmeid? Kui mõnda masinasse ei saa otse vaid ainult läbi mõne kindla masina? Selleks, et seda kõike paremini hallata, on SSH'l olemas konfiguratiooni fail mis lubab kõike seda paremini hallata ning teha kasutaja jaoks SSH kasutamine igapäevaselt oluliselt mugavamaks.

~/.ssh/config

~/.ssh/config või $HOME/.ssh/config on kasutajapõhine ssh seadistuste fail kus on võimalik defineerida parameetreid mida süsteem peab kasutama erinevate masinatega ühendamiseks.

Näide

Kasutaja peab logima masinasse dev.example.com kasutades porti 22000 ning kasutajat foo (eeldame, et SSH võtmed on varasemalt juba seadistatud - Ssh#Paroolita_autentimine):

$ ssh foo@dev.example.com -p 22000

Täpselt sama asja on võimalik saavutada oluliselt mugavamalt lisades faili ~/.ssh/config järgmised read:

Host dev
   HostName dev.example.com
   Port 22000
   User foo

Ning käivitades seejärel järgneva käsu:

$ ssh dev

Mingil hetkel saab kasutaja õiguse ligi saada ka masinale prod.example.com pordile 22001 ning kasutajaks on foo:

$ ssh foo@prod.example.com -p 22001

Et teha elu mugavamaks tuleks lisada faili ~/.ssh/config järgmised read:

Host prod
   HostName prod.example.com
   Port 22001
   User foo

Seejärel saab logida antud masinasse sisse lihtsalt:

$ ssh prod

näite kokkuvõte

Kui algselt pidi kasutaja kahte erinevasse masinasse ühendudes kasutama järgmisi käske:

 $ ssh foo@dev.example.com -p 22000
 $ ssh foo@prod.example.com -p 22001

siis peale faili ~/.ssh/config järgmiste ridade lisamist

Host dev
   HostName dev.example.com
   Port 22000
   User foo
Host prod
   HostName prod.example.com
   Port 22001
   User foo

saab ta teha seda oluliselt lihtsamalt:

$ ssh dev
$ ssh prod

Nagu näitest on näha, peab kasutaja meelde jätma ainult tema poolt defineeritud hosti aliase ning kõik muu (port, kasutaja, tegelik host) on tema eest peidus.