Najčešća upotreba i konfiguracija SSH naredbe u Linuxu


Ukratko: u ovom vodiču raspravljat ćemo o uobičajenim slučajevima upotrebe SSH-a. Također ćemo raspravljati o često korištenim SSH konfiguracijama koje se mogu koristiti u svakodnevnom životu za povećanje vaše produktivnosti.

Secure Shell (SSH) široko je prihvaćen mrežni protokol koji nam omogućuje interakciju s udaljenim računalima na siguran način. Pruža sigurnost kriptiranjem sve komunikacije između njih.

Kako koristiti SSH naredbu u Linuxu

U ovom odjeljku raspravljat ćemo o nekim od popularnih slučajeva upotrebe SSH protokola.

Postoje različiti načini interakcije s udaljenim Linux hostovima korištenjem protokola kao što su telnet, netcat, itd. Međutim, oni nisu sigurni zbog nepostojanja enkripcije. Možemo koristiti SSH protokol kako bismo omogućili sigurnu komunikaciju između hostova.

Moramo koristiti SSH klijent za interakciju s udaljenim hostom. Za Linux je dostupno mnogo GUI i CLI klijenata. Međutim, kroz ovaj vodič koristit ćemo pomoćni program naredbenog retka pod nazivom ssh. Prema zadanim postavkama, uslužni program ssh dostupan je u većini distribucija Linuxa.

Sintaksa SSH naredbe je sljedeća:

$ ssh [OPTIONS]  [COMMANDS] [ARGS]

Ovdje uglate zagrade ([]) predstavljaju neobavezne argumente, dok uglate zagrade (<>) predstavljaju obavezne argumente.

Povežimo se na udaljeni host pomoću ssh klijenta:

$ ssh -l root 192.168.19.130

U ovom smo primjeru naveli ime za prijavu pomoću opcije -l, a odredište je 192.168.19.130. SSH veza se uspostavlja nakon unosa točne lozinke. Sada nadalje, možemo izvršavati naredbe na udaljenom hostu baš kao i lokalni sustav.

# hostname

Za prekid sesije možemo koristiti naredbu izlaz ili kombinaciju tipki ctrl+D.

Važno je napomenuti da se za svaku novu sesiju moramo autentificirati s udaljenim hostom. Kako bismo izbjegli svaki put unos lozinki, možemo postaviti SSH prijavu bez lozinke.

U prethodnom odjeljku vidjeli smo kako uspostaviti vezu s udaljenim hostom, što je prikladno samo kada ćemo udaljeni host koristiti dulje vrijeme. Ponekad samo trebamo izvršiti jednu ili dvije naredbe na udaljenom računalu. U takvim slučajevima možemo izvršiti te naredbe bez stvaranja dugotrajne sesije.

Izvršimo naredbu hostname na udaljenom hostu:

$ ssh -l root 192.168.19.130 hostname

Na sličan način možemo izvršiti više naredbi na udaljenom Linux stroju:

$ ssh -l root 192.168.19.130 'hostname; pwd'

Važno je napomenuti da naredbe moraju biti unutar navodnika i odvojene znakom točka-zarez (;). Ako želite pokrenuti naredbe na više udaljenih Linux hostova, pročitajte naš članak – Pssh – Pokreni naredbe na više udaljenih Linux hostova.

Slično naredbama također možemo izvršiti lokalnu skriptu na udaljenom računalu. Shvatimo ovo na primjeru.

Najprije izradite jednostavnu skriptu ljuske na lokalnom računalu s izvršnim dopuštenjima na njemu:

$ cat script.sh 

hostname
pwd

Sada, izvršimo to na udaljenom hostu:

$ ssh [email protected] 'bash -s' < ./script.sh 

U ovom smo primjeru upotrijebili opciju -s basha za čitanje skripte iz standardnog unosa.

Vrlo često radimo s datotekama i imenicima. Jedna uobičajena radnja koju korisnici izvode je kopiranje direktorija i datoteka. Baš kao i lokalni strojevi, možemo kopirati datoteke i direktorije između udaljenih računala pomoću naredbe scp, koja sigurno kopira datoteke pomoću SSH protokola.

Kopirajmo datoteku script.sh u /tmp direktorij udaljenog hosta:

$ scp script.sh [email protected]:/tmp

Sada provjerite je li datoteka kopirana:

$ ssh [email protected] 'ls /tmp/script.sh'

Na sličan način možemo koristiti naredbu scp za kopiranje direktorija. Međutim, uz naredbu moramo koristiti opciju -r.

SSH podržava kompresiju podataka korištenjem algoritma kompresije gzip, koji komprimira sve moguće tokove podataka kao što su stdin, stdout, stderr itd. Ova je opcija vrlo korisna pri korištenju sporih mrežnih veza.

Možemo omogućiti kompresiju na SSH pomoću opcije -C:

$ ssh -C -l root 192.168.19.130 'hostname' 

Korisnici Linuxa često moraju ispravljati pogreške u SSH sesijama kako bi istražili razne probleme vezane uz SSH vezu i konfiguraciju. U takvim slučajevima možemo omogućiti verbose način rada koji ispisuje zapisnike otklanjanja pogrešaka trenutne sesije.

Omogućimo verbose način pomoću opcije -v:

$ ssh -v -l root 192.168.19.130 hostname

Uz to, možemo povećati razinu opširnosti korištenjem više opcija -v.

  • -v – postavlja razinu opširnosti na 1 i daje detalje o aktivnostima na strani klijenta.
  • -vv – postavlja razinu opširnosti na 2 i pruža pojedinosti o aktivnostima klijenta i poslužitelja.
  • -vvv – postavlja razinu opširnosti na 3 i pruža detaljnije informacije o aktivnostima klijenta i poslužitelja.

Maksimalna razina opširnosti koju podržava SSH je 3. Pogledajmo ovo na djelu:

$ ssh -vvv -l root 192.168.19.130 hostname

U gornjem primjeru, debug1 predstavlja poruku za ispravljanje pogrešaka omogućenu razinom opširnosti 1. Slično, debug2 i debug3 predstavljaju poruke za ispravljanje pogrešaka omogućene razinama opširnosti 2 i 3.

Možemo koristiti izlazne sekvence sa SSH-om za upravljanje sesijama klijentskog terminala. Raspravljajmo o često korištenim escape sekvencama s odgovarajućim slučajevima upotrebe.

Ponekad moramo izvršiti nekoliko aktivnosti na lokalnom računalu bez prekida trenutne SSH sesije. U takvom scenariju možemo obustaviti trenutnu sesiju korištenjem niza tipki ~ + ctrl+z.

Prvo se prijavite na udaljeni host i izvršite naredbu hostname:

$ ssh -l root 192.168.19.130
# hostname

Zatim, da biste obustavili trenutnu sesiju, prvo upišite znak tilde (~), a zatim pritisnite tipke ctrl+z. Važno je napomenuti da znak tilde (~) neće biti prikazan na stdoutu dok ne pritisnemo ctrl+z.

Sada provjerimo je li sesija obustavljena:

$ jobs

Ovdje možemo vidjeti da se trenutna SSH sesija izvodi u pozadini.

Nastavimo ponovno sesiju pomoću naredbe fg i izvršimo naredbu hostname:

$ fg %1

Siguran sam da ste vidjeli zamrznute SSH sesije, koje se događaju kada sesiju prekine nestabilna mreža. Ovdje ne možemo prekinuti sesiju pomoću naredbe izlaz. Međutim, možemo ga prekinuti pomoću niza tipki \~ + .\.

Prvo se prijavite na udaljeni host:

$ ssh -l root 192.168.19.130

Sada upotrijebite kombinaciju tipki \~ + .\ za prekid trenutne sesije.

U ovom primjeru možemo vidjeti da SSH prikazuje poruku – Veza na 192.168.19.130 zatvorena.

Jedna zanimljiva stvar je da postoji escape sekvenca za popis svih podržanih escape sekvenci. Možemo koristiti \~ + ? izlaznu sekvencu za popis podržanih izlaznih sekvenci:

Ovdje moramo pritisnuti tipku enter da izađemo iz izbornika pomoći.

Kako konfigurirati SSH u Linuxu

U ovom odjeljku raspravljat ćemo o konfiguraciji na strani poslužitelja kako bismo ojačali SSH poslužitelj. SSH poslužitelj pohranjuje svu svoju konfiguraciju u datoteku /etc/ssh/sshd_config. Važno je napomenuti da je root korisnički pristup potreban za ažuriranje SSH konfiguracije.

Kao najbolja praksa, uvijek bismo trebali prikazati banner prije uspostavljanja SSH veze. U nekim slučajevima obeshrabruje neovlaštene korisnike od pristupa udaljenim hostovima. Pogledajmo kako omogućiti ovu postavku korak po korak.

Prvo stvorite tekstualnu datoteku na udaljenom poslužitelju s porukom upozorenja:

# vi /etc/banner.txt 

Zatim dodajte sljedeću banner poruku:

*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************

Zatim otvorite datoteku /etc/ssh/sshd_config i navedite datoteku s banner direktivom:

Banner /etc/banner.txt

Sada ponovno pokrenite sshd servis i prekinute sesiju pomoću naredbe izlaz:

# systemctl restart sshd
# exit

Na kraju, provjerite banner prijavom na udaljeni host:

$ ssh -l root 192.168.19.130

Ovdje možemo vidjeti da poslužitelj ispravno prikazuje SSH banner.

Do sada smo koristili root korisnika za pristup udaljenom hostu. Međutim, to je protivno načelu najmanje privilegije. U produkcijskom okruženju pristup korijenskog korisnika uvijek je ograničen radi poboljšanja sigurnosti.

Možemo koristiti direktivu PermitRootLogin da onemogućimo prijavu root korisnika.

Prvo otvorite datoteku /etc/ssh/sshd_config i upotrijebite opciju no s direktivom PermitRootLogin:

PermitRootLogin no

Sada ponovno pokrenite sshd servis i prekinute sesiju pomoću naredbe izlaz:

# systemctl restart sshd
# exit

Na kraju, provjerite ovo stvaranjem nove SSH sesije:

$ ssh -l root 192.168.19.130

Ovdje možemo primijetiti da se ne možemo prijaviti na udaljeni host s root korisnikom. Da bismo omogućili prijavu root korisnika možemo koristiti opciju yes s istom direktivom.

Prema zadanim postavkama, SSH koristi TCP port 22. Međutim, možemo konfigurirati SSH da radi na drugom portu, tj. 8088.

Prvo otvorite datoteku /etc/ssh/sshd_config i upotrijebite vrijednost 8088 s direktivom Port:

Port 8088

Zatim ponovno pokrenite sshd uslugu i prekinite sesiju:

# systemctl restart sshd
# exit

Sada se prijavimo na udaljeni host:

$ ssh -p 8088 -l root 192.168.19.130

U ovom smo primjeru upotrijebili opciju -p za određivanje broja priključka.

U nekim slučajevima moramo izvršiti nekoliko drugih koraka kako bismo omogućili komunikaciju na portu koji nije zadani. Kao što je identificiranje dostupnih portova, ažuriranje pravila vatrozida, SELinux postavki itd.

U ovom smo članku raspravljali o SSH protokolu i njegovim uobičajenim slučajevima upotrebe. Zatim smo razgovarali o nekoliko uobičajenih opcija. Na kraju smo razgovarali o nekim postavkama za osiguranje SSH poslužitelja.

Znate li za neku drugu najbolju upotrebu SSH naredbe u Linuxu? Recite nam svoje stavove u komentarima ispod.