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 hostovima 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.

Povežite se s udaljenim Linux hostom

Postoje različiti načini interakcije s udaljenim Linux hostovima pomoću protokola kao što su telnet, ftp, 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 s udaljenim hostom 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 exit 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.

Izvršite naredbe na udaljenom računalu

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.

Izvršite skriptu na udaljenom računalu

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  'bash -s' < ./script.sh 

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

Kopirajte datoteke između hostova

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 direktorij /tmp udaljenog hosta:

scp script.sh [email :/tmp

Sada provjerite je li datoteka kopirana:

ssh [email  '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.

Omogući kompresiju za SSH

SSH podržava kompresiju podataka pomoću gzip algoritma kompresije, 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' 

Omogući Verbose Mode za SSH

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 pruža detalje o aktivnostima na strani klijenta.
  • -vv – postavlja razinu opširnosti na 2 i daje 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 pomoću razine opširnosti 2 odnosno 3.

Escape sekvence u SSH-u

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

Obustava SSH sesije

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 ponovo sesiju pomoću naredbe fg i izvršimo naredbu ime hosta:

fg %1

Prekini zamrznutu SSH sesiju

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.

Popis podržanih izlaznih sekvenci

Jedna zanimljiva stvar je da postoji escape sekvenca za popis svih podržanih escape sekvenci. Možemo koristiti “~ + ? ” izlazni niz za popis podržanih izlaznih nizova:

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.

Prikaz SSH bannera

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.

Najprije izradite 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 direktivom Banner:

Banner /etc/banner.txt

Sada ponovno pokrenite uslugu sshd i prekinite sesiju pomoću naredbe exit:

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.

Onemogućite SSH root prijavu

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 uslugu sshd i prekinite sesiju pomoću naredbe exit:

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. Kako bismo omogućili prijavu root korisnika možemo koristiti opciju yes s istom direktivom.

Promjena zadanog SSH priključka

Prema zadanim postavkama, SSH koristi TCP priključak 22. Međutim, možemo konfigurirati SSH da radi na drugom priključku, npr. 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.