Kako postaviti pametne telefone i računala. Informativni portal

SSH - pristup, konfiguracija programa. Zadane opcije

Predstavljamo vam novi tečaj iz tima Codeby- "Testiranje prodora web aplikacija od nule." Opća teorija, priprema radnog okruženja, pasivni fuzzing i otisak prsta, aktivni fuzzing, ranjivosti, posteksploatacija, alati, društveni inženjering i još mnogo toga.


Što je SSH i zašto vam je potreban?

Secure Shell (SSH) mrežni je protokol koji pruža funkcije ljuske udaljenom računalu putem sigurnog kanala. SSH dolazi s raznim sigurnosnim poboljšanjima, uključujući provjeru autentičnosti korisnika/domaćina, enkripciju podataka i integritet podataka, čineći popularne napade poput prisluškivanja, lažiranja DNS/IP-a, krivotvorenja podataka i otmice veze nemogućima itd. Ftp, telnet ili rlogin korisnici koji koriste protokol koji prenosi podatke u čistom tekstu toplo se preporučuje za prebacivanje na SSH.

OpenSSH je open-source implementacija SSH protokola koja vam omogućuje šifriranje vaše mrežne veze putem skupa programa. Ako želite imati SSH na Linuxu, možete instalirati OpenSSH, koji se sastoji od OpenSSH poslužitelja i klijentskih paketa.

Paketi OpenSSH poslužitelj/klijent dolaze sa sljedećim uslužnim programima:

  • OpenSSH poslužitelj: sshd (SSH demon)
  • OpenSSH klijent: scp (sigurna udaljena kopija), sftp (sigurni prijenos datoteka), slogin/ssh (sigurna udaljena prijava), ssh-add (dovršavanje privatnog ključa), ssh-agent (agent za provjeru autentičnosti), ssh-keygen (upravljanje ključem za provjeru autentičnosti ).

Instaliranje OpenSSH poslužitelja i klijenta na Linux

Ako želite instalirati OpenSSH poslužitelj/klijent i konfigurirati OpenSSH poslužitelj za automatsko pokretanje, slijedite sljedeće upute, koje se razlikuju ovisno o distribuciji.

Debian, Ubuntu ili Linux Mint

$ sudo apt-get instaliraj openssh-poslužitelj openssh-klijent

Na sustavima temeljenim na Debianu, nakon instaliranja, OpenSSH će se pokrenuti automatski pri dizanju sustava. Ako se iz nekog razloga OpenSSH poslužitelj ne pokrene automatski pri pokretanju sustava, možete pokrenuti sljedeću naredbu da eksplicitno dodate ssh u boot pri pokretanju sustava.

$ sudo update-rc.d zadane ssh postavke

Fedora ili CentOS/RHEL 7

$ sudo yum -y instalirajte openssh-poslužitelj openssh-klijenti $ sudo systemctl pokrenite sshd uslugu $ sudo systemctl omogućite sshd.service

CentOS/RHEL 6

$ sudo yum -y instalirajte openssh-poslužitelj openssh-klijenti $ sudo usluga sshd start $ sudo chkconfig sshd na

Arch Linux

$ sudo pacman -Sy openssh $ sudo systemctl pokreni sshd uslugu $ sudo systemctl omogući sshd.service

Postavljanje OpenSSH poslužitelja

Ako želite konfigurirati OpenSSH poslužitelj, možete urediti konfiguracijsku datoteku za cijeli sustav koja se nalazi u /etc/ssh/sshd_config.

Postoji nekoliko OpenSSH opcija koje bi mogle biti zanimljive:

Prema zadanim postavkama, sshd osluškuje port 22 i osluškuje dolazne ssh veze. Promjenom zadanog porta za ssh možete spriječiti razne automatizirane hakerske napade.

Adresa slušanja 192.168.1.1

Ako vaš stroj ima više od jednog fizičkog mrežnog sučelja, možda ćete htjeti provjeriti koje je povezano sa sshd, za to možete koristiti opciju ListenAddress. Ova opcija pomaže poboljšati sigurnost ograničavanjem dolaznog SSH-a samo na određeno sučelje.

HostKey /etc/ssh/ssh_host_key

Opcija HostKey određuje gdje se nalazi osobni ključ hosta.

DozvolaRootLogin br

Opcija PermitRootLogin – može li se root prijaviti u sustav putem ssh-a.

AllowUsers alice bob

Pomoću opcije AllowUsers možete selektivno onemogućiti ssh uslugu za određene korisnike Linuxa. Možete navesti više korisnika, odvojenih razmacima.

Nakon što je /etc/ssh/sshd_config promijenjen, svakako ponovno pokrenite ssh uslugu.

Za ponovno pokretanje OpenSSH na Debianu, Ubuntuu ili Linux Mintu:

$ sudo /etc/init.d/ssh ponovno pokrenite

Za ponovno pokretanje OpenSSH na Fedora, CentOS/RHEL 7 ili Arch Linux:

$ sudo systemctl ponovno pokrenite sshd.service

Za ponovno pokretanje OpenSSH na CentOS/RHEL 6:

$ sudo servis sshd ponovno pokrenite

Kako se spojiti na SSH

Spajanje na SSH iz Linuxa

Korisnici Linuxa ne moraju instalirati dodatne programe.

Spajanje na SSH iz Windowsa

Za Windows mnogi ljudi preporučuju i uspješno koriste PuTTY. Nemam ništa protiv ovog programa, ali sam preferiram i preporučujem Cygwin.

Cygwin nije samo SSH klijent. To je moćan kombinirač koji podržava mnoge Linux naredbe. Na primjer, Cygwin omogućuje vrlo jednostavno stvaranje SSL certifikata (baš kao Linux). U sustavu Windows, za stvaranje samopotpisanih certifikata morate plesati s tamburinom. Cygwin je vrlo zgodan za korištenje cURL-a (nema potrebe za posebnom instalacijom), itd. Oni kojima nedostaju naredbeni redak i Linux programi na Windowsima pronaći će izlaz u Cygwinu.

Instalacija Cygwina je jednostavna. Idite na službenu web stranicu i preuzmite 32-bitnu ili 64-bitnu verziju.

Preuzet će se mala datoteka - ovo je instalacijski program. Grafički instalater. Iako sadrži velik broj opcija, sve su vrlo jednostavne i mnoge su poznate iz drugih grafičkih instalatera. Ako nešto nije jasno, samo kliknite "Dalje". Možda samo sljedeći prozor može dovesti do zabune:

Ovdje su prikazani svi elementi dostupni za ugradnju. Ne moramo ih sada razumjeti. Budući da su najpopularniji već označeni za instalaciju. A ako nešto bude nedostajalo u budućnosti, lako možete instalirati ono što trebate.

SSH veza (zajednička za Linux i Windows)

Korisnici Linuxa otvaraju konzolu, korisnici Windowsa upisuju Cygwin.

SSH treba sljedeće podatke za povezivanje:

  • IP ili naziv hosta
  • broj porta
  • Korisničko ime
  • korisnička lozinka

Dva od ovih parametara SSH može pogoditi: korisničko ime i broj porta. Ako port nije naveden, pretpostavlja se zadani port. Ako korisnik nije naveden, tada se koristi isto ime kao na sustavu s kojeg je uspostavljena veza. Na primjer, adresa glavnog računala za vezu je 192.168.1.36. Ako biram

Ssh 192.168.1.36

Vidim sljedeće

Alex@MiAl-PC ~ $ ssh 192.168.1.36 Autentičnost hosta "192.168.1.36 (192.168.1.36)" ne može se utvrditi. Otisak ključa ECDSA je SHA256:sIxZeSuiivoEQ00RXAQHxylxuEA8SC5r/YPhL8wfp8s. Jeste li sigurni da želite nastaviti povezivanje ing ( da ne)?

Budući da se prvi put povezujem s hostom, radi se o nepoznatom hostu. Pitaju me želim li nastaviti. biram Da:

Upozorenje: Trajno dodan "192.168.1.36" (ECDSA) na popis poznatih hostova. [e-mail zaštićen]"ova lozinka:

U redu, host 192.168.1.36 dodan je na popis poznatih hostova. Od mene se traži lozinka za korisnika Alex. Pošto nema takvog korisnika na serveru sa SSH-om, ali kliknem Ctrl+C(za razbijanje) i unesite naredbu zajedno s korisničkim imenom udaljenog sustava. Korisnik se upisuje prije adrese udaljenog stroja i odvaja se od adrese simbolom @. Simbol @ na engleskom se čita kao at i može se prevesti kao "in". Oni. snimiti [e-mail zaštićen] može se protumačiti kao "mial korisnik na stroju 192.168.1.36".

Ssh [e-mail zaštićen]

Pozivnica Alex@MiAl-PC zamijenjena je pozivnicom mial@mint. To znači da smo već na udaljenom računalu, tj. već smo uspostavili vezu. Ako trebate navesti port (ako se razlikuje od standardnog), tada se port mora navesti nakon prekidača -p. Na primjer ovako:

Ssh [e-mail zaštićen]-str 10456

Nakon povezivanja, pozdravlja nas nešto poput ovoga:

Linux mint 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 Programi uključeni u sustav Debian GNU/Linux besplatni su softver; točni uvjeti distribucije za svaki program opisani su u pojedinačnim datotekama u /usr/share/doc/*/copyright. Debian GNU/Linux dolazi bez APSOLUTNO NIKAKVOG JAMSTVA, u mjeri dopuštenoj važećim zakonom. Zadnja prijava: utorak, 16. lipnja 15:32:25 2015. s 192.168.1.35

Iz toga slijedi da je udaljeni stroj Linux Mint, s kernelom 3.16, 64-bitnom verzijom. Također bitan podatak je vrijeme zadnje prijave i IP adresa s koje je veza potekla. Ako vam vrijeme i IP nisu poznati, a vi ste jedini korisnik, tada je vaš sustav ugrožen i trebate poduzeti odgovarajuće mjere.

Utipkajmo nekoliko naredbi kako bismo bili sigurni gdje smo i tko smo: pwd, uname -a itd.:

Za prekid sesije (odjava), nazovite

Ili kliknite Ctrl+D.

Prijavite se na SSH bez unosa lozinke

Prvo, to je samo praktičnije. Drugo, sigurnije je.

Prvo, moramo stvoriti RSA ključeve. Ako ste korisnik Linuxa, onda ste u redu. Ako ste Windows korisnik, ali niste poslušali moj savjet i odabrali ste PuTTY, onda imate problem i sami razmislite kako ga riješiti. Ako imate Cygwin, onda je također sve u redu.

Ako ste se uspjeli prijaviti na udaljeni sustav, odjavite se. Nakon toga upišite

Ssh-keygen -t rsa

Od nas se traži naziv datoteke, ne trebamo ništa unositi, koristit će se zadani naziv. Također traži lozinku. Ne upisujem lozinku.

Sada na udaljenom računalu moramo stvoriti .ssh direktorij. Izvršenje naredbe na udaljenom računalu bit će objašnjeno u nastavku. Za sada samo kopirajte naredbu, ne zaboravite promijeniti IP adresu i korisničko ime svojima:

Ssh [e-mail zaštićen] mkdir.ssh

Sada moramo kopirati sadržaj datoteke id_rsa.pub na udaljeni stroj. To je vrlo jednostavno učiniti (ne zaboravite promijeniti podatke u svoje):

Mačka .ssh/id_rsa.pub | ssh [e-mail zaštićen]"cat >> .ssh/authorized_keys"

Sada se samo prijavimo i više nas ne traže nikakvu lozinku. I uvijek će biti ovako sada.

Izvršavanje naredbi na udaljenom poslužitelju bez stvaranja sesije ljuske

Osim otvaranja sesije ljuske na udaljenom sustavu, ssh vam također omogućuje izvršavanje pojedinačnih naredbi na udaljenom sustavu. Na primjer, da biste pokrenuli naredbu stablo na udaljenom hostu pod nazivom remote-sys i prikazali rezultate na lokalnom sustavu, učinili biste ovo:

ssh stablo daljinskog sustava

Moj pravi primjer:

Ssh [e-mail zaštićen] drvo

Pomoću ove tehnike možete raditi zanimljive stvari, poput pokretanja ls naredbe na udaljenom sustavu i preusmjeravanja izlaza u datoteku na lokalnom sustavu:

ssh remote-sys "ls *" > dirlist.txt

Pravi primjer:

Ssh [e-mail zaštićen]"ls *" > dirlist.txt cat dirlist.txt

Obratite pažnju na jednostruke navodnike u gornjoj naredbi. To je zato što ne želimo da se proširenje staze radi na lokalnom stroju; jer nam je potrebno ovo izvršenje na udaljenom sustavu. Također, ako želimo preusmjeriti standardni izlaz u datoteku na udaljenom računalu, možemo staviti izjavu o preusmjeravanju i naziv datoteke unutar jednostrukih navodnika:

ssh remote-sys "ls * > dirlist.txt"

Prijenos standardnog izlaza s lokalnog računala na udaljeno računalo putem ssh-a

Jednako zanimljiva opcija za izvršavanje naredbi dana je malo više:

Mačka .ssh/id_rsa.pub | ssh [e-mail zaštićen]"cat >> .ssh/authorized_keys"

  • Naredba cat čita red po red i prikazuje sadržaj datoteke .ssh/id_rsa.pub koja se nalazi na lokalnom računalu.
  • | (cijev) prosljeđuje ono što bi se pojavilo na standardnom izlazu drugoj naredbi.
  • Umjesto naredbe koja bi obradila proslijeđene nizove, uspostavlja se veza s udaljenim sustavom (ssh [e-mail zaštićen]).
  • Udaljeni sustav prima linije za koje je predviđena naredba cat >> .ssh/authorized_keys. Oni. sadržaj standardnog izlaza piše se red po red u datoteku .ssh/authorized_keys koja se nalazi na udaljenom stroju.

Otvaranje grafičkog programa koji se nalazi na udaljenom računalu

Sljedeći trik zahtijeva dva Linux računala. Nažalost, čak ni Cygwin ne može podnijeti ovaj trik. Štoviše, oba Linux sustava moraju imati grafičko korisničko sučelje.

Tuneliranje sa SSH

Među ostalim stvarima koje se događaju kada se uspostavi veza s udaljenim hostom putem SSH-a je stvaranje šifriranog tunela koji se formira između lokalnog i udaljenog sustava. Obično se ovaj tunel koristi kako bi se osiguralo da se naredbe upisane na lokalnom stroju sigurno prenose na udaljeni stroj, a rezultat se također sigurno šalje natrag.

Uz ovu osnovnu funkcionalnost, SSH protokol omogućuje slanje većine vrsta prometa preko šifriranog tunela, stvarajući neku vrstu VPN-a (virtualne privatne mreže) između lokalnog i udaljenog sustava.

Možda je najčešće korištena od ovih značajki mogućnost emitiranja prometa sustava X Window. Na sustavu koji pokreće X poslužitelj (to su strojevi koji imaju grafičko korisničko sučelje), moguće je pokrenuti X klijentski program (grafičku aplikaciju) na udaljenom sustavu i vidjeti rezultate njegovog rada na lokalnom sustavu. Lako je napraviti. Na primjer, želim se spojiti na udaljeni host remote-sys i na njemu želim pokrenuti program xload. U isto vrijeme, moći ću vidjeti grafički izlaz ovog programa na lokalnom računalu. To se radi ovako:

ssh -X daljinski-sys

Pravi primjer:

Ssh -X [e-mail zaštićen] gedit

Oni. SSH počinje s prekidačem -X. I tada se program jednostavno pokreće. Pogledajte snimak zaslona.

Ja sam na Kali Linuxu. Uspješno sam se prijavio na udaljeno računalo putem SSH-a. Nakon toga sam pokrenuo program gedit. Ovaj program možda čak i nije na Kali Linuxu, ali definitivno jest na Linux Mintu, s kojim sam se povezao. Mogu vidjeti rezultat ovog programa na zaslonu kao da se program izvodi lokalno. Ali opet, želim da ovo shvatite, na lokalnom računalu ne radi program gedit. Ako želim spremiti rezultat gedita (ili bilo kojeg drugog programa otvorenog na ovaj način), ispada da radi u okruženju udaljenog računala, vidi njegov datotečni sustav itd. Ovo je zgodno kada želite konfigurirati udaljeno računalo pomoću grafičkog sučelja.

Naučit ćete kako prenijeti sliku s cijele radne površine u istom članku kasnije, u odjeljku "Kako konfigurirati VNC putem SSH-a".

Na nekim sustavima ovaj trik zahtijeva korištenje opcije -Y umjesto opcije -X.

Kopiranje s/na udaljeno računalo (scp i sftp)

scp

Paket OpenSSH također uključuje dva programa koji koriste šifrirani SSH tunel za kopiranje datoteka preko mreže. Prvi program - scp(“sigurna kopija”) - koristi se češće, poput sličnog cp programa za kopiranje datoteka. Najuočljivija razlika je u tome što izvor datoteke može biti udaljeni host nakon kojeg slijedi dvotočka i lokacija datoteke. Na primjer, ako želimo kopirati dokument pod nazivom document.txt iz našeg matičnog direktorija u remote-sys u trenutnom radnom direktoriju na našem lokalnom sustavu, mogli bismo učiniti ovo:

Scp remote-sys:document.txt. document.txt 100% 177 0.2KB/s 00:00

Pravi primjer:

# izbrišite datoteku na lokalnom računalu ako postoji rm dirlist.txt # kreirajte datoteku na udaljenom računalu ssh [e-mail zaštićen]"ls * > dirlist.txt" # provjeri njegovu prisutnost ssh [e-mail zaštićen]"ls -l" # kopirajte ga na lokalni stroj scp [e-mail zaštićen]:dirlist.txt. # provjerite njegov sadržaj cat dirlist.txt

Za kopiranje datoteke s lokalnog računala na udaljeno računalo:

scp lokalna_datoteka udaljeni-sys:.

Pravi primjer

# kreirajte novu datoteku touch nfile.txt # pošaljite scp datoteku nfile.txt [e-mail zaštićen]:. nfile.txt 100% 0 0.0KB/s 00:00 # provjerite prisutnost datoteke na ssh udaljenom računalu [e-mail zaštićen]"je -l"

U naredbi za slanje:

  • nfile.txt - naziv datoteke,
  • [e-mail zaštićen]— korisničko ime i udaljeni host,
  • . (točka) znači da datoteku treba kopirati u trenutni radni direktorij na udaljenom poslužitelju, ali će naziv datoteke ostati isti, tj. nfile.txt

Napomena:

Za kopiranje datoteke iz B u A kada ste prijavljeni u B:

scp /put/do/datoteke korisničko ime@a:/put/do/odredišta

Kopiranje datoteke iz B u A kada ste prijavljeni na A:

scp korisničko ime@b:/put/do/datoteke /put/do/odredišta

sftp

Drugi program za kopiranje datoteka putem SSH je sftp. Kao što mu ime govori, to je sigurna zamjena za ftp program. sftp radi kao izvorni ftp program. Međutim, umjesto slanja čistog teksta, koristi šifrirani SSH tunel. Važna prednost sftp-a nad ftp-om je ta što ne zahtijeva rad FTP poslužitelja na udaljenom računalu. Zahtijeva samo SSH poslužitelj. To znači da se svaki udaljeni stroj koji je spojen preko SSH klijenta također može koristiti kao poslužitelj sličan FTP-u. Evo primjera sesije:

Alex@MiAl-PC ~ $ sftp [e-mail zaštićen] Povezan na 192.168.1.36. sftp> ls dirlist.txt newfile.txt nfile.txt temp Video zapisi Dokumenti Preuzimanja Slike Glazba Javni predlošci radne površine sftp> lls dirlist.txt nfile.txt sftp> ls temp temp/TakeMeHome sftp> cd temp/ sftp> get TakeMeHome Fetching /home / mial/temp/TakeMeHome do TakeMeHome sftp> bok

SFTP protokol podržavaju mnogi grafički upravitelji datoteka koji se mogu pronaći u distribucijama Linuxa. Koristeći Nautilus (GNOME) i Konqueror (KDE), možemo unijeti URI (linkove) koji počinju sa sftp:// u traku za skok i raditi s datotekama koje se nalaze na udaljenom sustavu koji pokreće SSH poslužitelj.

Jamac je pouzdani posrednik između sudionika tijekom transakcije.


SSH (Secure Shell) je mrežni protokol za daljinski pristup koji koristi enkripciju i kompresiju za prenesene podatke. Jednostavno rečeno, ovo je vrlo koristan i moćan alat koji vam omogućuje autentifikaciju u sustavu i potpuni rad u ime lokalnog korisnika, koji je mnogo kilometara udaljen od radnog stroja. Također, za razliku od telneta i rsh-a, SSH kriptira sav promet, tako da sve prenesene informacije ostaju povjerljive.

Dakle, već imamo instaliran ssh i ssh-daemon je dodan u pokretanje pri pokretanju sustava. Njime možete upravljati naredbom:

usluga ssh stop|start|ponovno pokretanje

Na Ubuntuu ili:

/etc/init.d/ssh (start|stop|reload|force-reload|restart|status)

Na Debianu ili:

systemctl start|stop|ponovno pokretanje sshd.service

U ArchLinuxu (nakon svakog uređivanja konfiguracije morate se ponovno pokrenuti). Komplet uključuje klijenta i poslužitelja.

Isprobajmo ga na djelu! Najprije izradite mapu ~/.ssh

mkdir ~/.ssh

Generirajte ključeve za ovog korisnika poslužitelja naredbom:

ssh-keygen (kao običan korisnik).

Prilikom generiranja možete postaviti zaporku za ključ (preporučljivo je postaviti dugu - tada se napadač neće moći prijaviti čak ni nakon što dobije ključ, ali ne zna lozinku za ključ), ili preskočite jednostavnim pritiskom na "Enter" - u ovom slučaju lozinka nikada neće biti tražena. Isti javni i privatni ključ pojavio se u mapi ~/.ssh.

Pronađite drugo računalo (čak će i pametni telefon poslužiti - postoje neki odlični SSH klijenti na Androidu, poput ConnectBot ili JuiceSSH), instalirajte ssh na njega i spojite se na poslužitelj pomoću naredbe:

ssh korisnik@poslužitelj

Ako je ispravno učinjeno, od vas će se tražiti korisnička lozinka, a kada je unesete, bit ćete prijavljeni u svoj sustav pomoću prikaza naredbenog retka.

Usput, za Windows postoje i ssh poslužitelji i klijenti.

Nakon što smo uživali u rezultatu našeg rada, prijeđimo na još dosadniji dio - postavljanje klijenta/poslužitelja.

Konfiguracija klijentskog dijela je unutra /etc/ssh/ssh_config, a poslužiteljski - /etc/ssh/sshd_config. Najpotpuniji vodič za postavljanje je vjerojatno man stranica - man ssh i man sshd_config, pa preporučujemo da ga pročitate. A u ovom članku ćemo pogledati najpotrebnije stvari.

postavke

Standardni ssh port je 22. Može se promijeniti u bilo koji nestandardni (što komplicira moguće hakiranje zbog sigurnosti kroz nejasnoću ili da bi se privukla pozornost potencijalnih hakera :) - da biste to učinili, odkomentirajte redak:

#Priključak 22

I dodajte bilo koju željenu do 65535 (pazeći da port nije u sukobu s drugim uslugama s naredbom #netstat -tupln | grep SLUŠAJTE).

Sada, kada se spaja na poslužitelj, klijent će morati pisati s ključem:

ssh -p [port] :

Prema zadanim postavkama dopušten je pristup kao root. Vrlo je preporučljivo ograničiti ga (i umjesto toga pravilno razgraničiti lokalna korisnička prava koristeći sudo). Da biste to učinili, pronađite redak "PermitRootLogin" i promijenite vrijednost u "ne". Također ga možete promijeniti u "bez lozinke" - u ovom slučaju, prijava kao root bit će dopuštena samo sa strojeva s pouzdanim ključem.

Možete onemogućiti provjeru autentičnosti lozinke i raditi samo s ključevima - pronađite redak: "PasswordAuthentication" i promijenite vrijednost u "ne". Za što? Ako netko stvarno želi dobiti pristup vašem sustavu, može ili pokušati pogoditi vašu lozinku tijekom pokušaja autorizacije ili prisluškivati ​​i dešifrirati vašu vezu. Ako onemogućite provjeru autentičnosti lozinke i dodate javni ključ vašeg, na primjer, radnog prijenosnog računala u ~/.ssh/authorized_keys na poslužitelju, tada ćemo, kao što se sjećamo, odmah moći pristupiti poslužitelju. Ali što ako radite na tuđem računalu i hitno morate dobiti pristup ssh poslužitelju, ali kao što se i očekivalo, on nas ne pušta? Tada ne možete onemogućiti provjeru autentičnosti lozinke, već koristiti uslužni program fail2ban. Samo ga instalirajte iz svog repozitorija, nakon čega će primijeniti zadane postavke i, barem, zaštititi vaš ssh kanal od brutalnog hakiranja. Više informacija o fail2banu - http://putty.org.ru/articles/fail2ban-ssh.html.

U slučaju da vaš poslužitelj pohranjuje ključeve za lansiranje nuklearnih projektila, možete učiniti nešto ovako:

PermitRootLogin ne - prijava kao root je zabranjena.

PasswordAuthentication no - prijava bez lozinke

Generirajmo dugi ključ na udaljenom računalu (-t tip_enkripcije, -b duljina bita):

ssh-keygen -t rsa -b 4096

S jednako složenom šifrom (usput, ne možete vratiti zaboravljenu lozinku. Možete je promijeniti naredbom “ssh-keygen -p”, ali u svakom slučaju od vas će se tražiti stara). Prenesimo javni ključ udaljenog lokalnog računala u ~/.ssh/authorized_keys poslužitelja, i voila - sada se pristup može dobiti s jednog stroja, korištenjem zaporke privatnog ključa. SSH vam omogućuje konfiguriranje mnogih sigurnosnih konfiguracija i ima mnogo specifičnih postavki za to - pročitajte o njima u man.

Dva sshd_config parametra služe istoj svrsi:

LoginGraceTime- određuje vrijeme nakon kojeg će se veza prekinuti ako se autentifikacija ne dogodi.

MaxAuthTries- postavlja broj netočnih pokušaja unosa prijave, nakon čega će se veza prekinuti.

MaxSessions- broj istodobnih sesija (ako je poslužitelj vaše kućno računalo, na koje ćete se spojiti sa fakulteta ili s posla, tada bi bilo razumno ograničiti broj sesija na jednu - odbijena prijava, u ovom slučaju, postati razlog povećanja paranoje, generiranja novih ključeva i mijenjanja lozinki). Međutim, ako ste pažljivi, mogli ste primijetiti da se svaki put kada se prijavite na poslužitelj prikazuje redak “Last Login”. Osim njega, možete dodati i svoju poruku dobrodošlice - pronađite redak "Banner" i umjesto none odredite put do datoteke s tekstom koji će biti pročitan i prikazan prilikom prijave.

Između ostalog, možete dopustiti prijavu samo određenim korisnicima ili dopustiti svima osim određenim korisnicima:

AllowUsers korisnik1- dopustiti prijavu samo korisniku1.

DenyUsers korisnik1- dopustiti svima osim korisnika1.

I slični parametri za pristup određenim grupama - AllowGroups i DenyGroups.

Također možete prenijeti X11 sesiju preko SSH-a. Da biste to učinili, pronađite redak "ForwardX11" i promijenite vrijednost u "yes".

Pronađite sličan redak u konfiguraciji klijenta - /etc/ssh/ssh_config, i također ga promijenite u "yes".

Sada se trebate spojiti na poslužitelj putem ssh-a s argumentom -X:

ssh -X korisnik@poslužitelj>

Aplikaciju možete pokrenuti odmah nakon povezivanja:

ssh -X korisnik@poslužitelj "aplikacija"

Ovako izgleda pokrenuti GIMP u ssh sesiji:

Ili možete dobiti izlaz s web kamere prijenosnog računala korisnika koji ništa ne sumnja :)

Izračuni se izvode izravno na poslužitelju, a izlaz se prenosi na klijentsko računalo (to jest, čak i ako sam poslužitelj nema instaliran X11, grafičke aplikacije mogu se prikazati na vašem udaljenom računalu). Ova shema radi prilično sporo (ne zaboravite da je sav promet dinamički šifriran) - ali ova je funkcija vrlo korisna.

Također možete kopirati datoteke pomoću SSH sesije - za to postoji jednostavan uslužni program "scp". Datoteke možete prenositi izravno u sesiji, s poslužitelja na klijenta:

scp korisnik@poslužitelj:/put/do/datoteke/na/poslužitelju/gdje/spremiti/na/lokalno/stroj

Dakle, od klijenta do poslužitelja:

scp put/do/datoteke/klijenta korisnik@poslužitelj:/put/na/poslužitelju

Ovo je prilično zgodno ako trebate kopirati udžbenik ili fotografiju, ali što učiniti kada morate raditi s mnogo datoteka? Za to postoji vrlo zgodna stvar - sshfs (dostupan za instalaciju u spremištima većine *nix sustava).

Samo postavite put sličan scp:

sshfs korisnik@poslužitelj:/home/korisnik /mnt/

I mapa /home/user poslužitelja će se pojaviti na /mnt točki montiranja lokalnog stroja!

Demontaža se vrši preko umount.

I na kraju, razgovarajmo o jednoj malo poznatoj značajci. Ako kreirate datoteku /.ssh/config i ispunite ga ovako:

Domaćin [ime]

Naziv hosta

Korisnik [korisničko ime poslužitelja]

željene opcije

Kao

NaprijedX11 da

Priključak 30000

Tada se možemo prijaviti koristeći:

ssh [ime]

ssh -X -p 30000 korisnik@poslužitelj

I sve opcije će se preuzeti automatski. Dakle, čestom provjerom autentičnosti na određenom poslužitelju, pojednostavit ćete ovaj proces na nekoliko trenutaka.

Pa, pokrili smo sve (pa čak i više) što trebate znati o SSH-u za svakodnevnu upotrebu - naučili smo kako koristiti ključnu provjeru autentičnosti, zaštitili poslužitelj od brutalnog hakiranja i, općenito, zakrpali većinu potencijalnih rupe. U stvari, SSH može učiniti mnoge druge stvari - na primjer, tuneliranje i prosljeđivanje portova kroz ssh sesiju, ali malo je vjerojatno da ćete vi, kao obični korisnik, to ikada koristiti. Dodatna sredstva

U ovom ćemo članku pogledati moderne i praktične načine rada s poslužiteljem putem SSH-a s VPS-om iz Infoboxa i oblaka.

Reći ćemo vam ne samo o uobičajenom načinu povezivanja, već io organiziranju stabilne veze preko nestabilnog interneta (na primjer, 3G modemi), kao io dodatnim uslužnim programima koji vam pomažu u radu putem SSH-a.

Ako ste korisnik Windowsa i trebate se brzo i jednostavno spojiti na Linux poslužitelj, idite na odjeljak "Putty ili kako se brzo spojiti na SSH iz Windowsa".

Što trebate znati za povezivanje putem SSH-a

Za povezivanje je potrebno:
  • IP adresa poslužitelja
  • prijaviti se
  • lozinka
Gdje dobiti podatke za spajanje na VPS NG server iz Infoboxa
Nakon naručivanja usluge, prijavite se na upravljačku ploču https://panel.infobox.ru.
Odaberite uslugu “VPS NG” u gornjem desnom kutu upravljačke ploče s padajućeg popisa.
Zatim idite na karticu "VPS".

U ovom odjeljku vidjet ćete ip adresa poslužitelja i možete instalirati lozinku za pristup poslužitelju.


Koristite svoje korisničko ime za povezivanje korijen, IP adresa s ove stranice i instaliran lozinka.
Ako ste zaboravili lozinku, kliknite na stavku "Uredi postavke pristupa" prikazanu na gornjoj snimci zaslona.

Gdje dobiti podatke za spajanje na VPS server iz Infoboxa
Prijavite se na upravljačku ploču https://panel.infobox.ru.
U padajućem popisu odaberite VPS uslugu u gornjem desnom kutu upravljačke ploče (naziv usluge sadrži naziv naručenog OS-a i regiju lokacije).

Zatim idite na karticu "VPS Management".


Koristi korisničko ime korijen, lozinku i IP adresu poslužitelja s ove stranice.

Gdje dobiti podatke za spajanje na InfoboxCloud poslužitelj
Nakon kreiranja poslužitelja, podaci za vezu će vam biti poslani e-poštom. Ovo je dovoljno za povezivanje.

Ako ste izgubili e-poštu s vašim pristupnim podacima i želite pristupiti poslužitelju
Prema zadanim postavkama, prijava administratora poslužitelja je: root

Prijavite se na upravljačku ploču na: https://panel.infobox.ru.
S padajućeg popisa odaberite uslugu “Cloud Servers” u gornjem desnom kutu upravljačke ploče.

Namjenska IP adresa za poslužitelj može se vidjeti u kartici "Cloud Infrastructure" na upravljačkoj ploči.

Ako polje " Namjenska IP adresa" prazno, to znači da prilikom kreiranja poslužitelja niste dodali barem 1 namjensku IP adresu na poslužitelj (pa stoga nema pristupa poslužitelju putem interneta, samo s lokalne mreže).

Za dodavanje namjenske IP adrese kliknite na naziv poslužitelja.

U grupi Mrežne postavke kliknite Konfiguriraj.


Provjerite je li vaša mrežna propusnost (brzina) dovoljna (ili dodajte više ako je potrebno).
Zatim kliknite “Dodaj IPv4 adresu” i kliknite “Spremi promjene”.


Sada poslužitelj ima namjensku IP adresu.


Za promjenu lozinke za pristup poslužitelju, kliknite "Promijeni", kao što je prikazano na gornjoj snimci zaslona. Na ovaj način možete postaviti lozinku za pristup poslužitelju.
Sada znaš ip adresa poslužitelja, prijaviti se ( korijen) I lozinka.

Postavljanje SSH klijenata

Za Windows
Za spajanje na poslužitelj trebat će vam SSH klijent. Ako se morate brzo spojiti, preporučuje se Putty. Ako trebate raditi s unix pomoćnim programima kao što su scp, rsync i ssh-copy-id, koristite Cygwin.
Putty ili kako se brzo spojiti na SSH iz Windowsa
Preuzmite Putty instalacijski program za Windows iz odjeljka Najnovija verzija verzije i instalirajte Putty sa zadanim postavkama.


Pokrenite Putty (Start -> Sve aplikacije -> PuTTY -> PuTTY).

Unesite IP adresu poslužitelja. Provjerite je li odabran port 22 i je li vrsta veze SSH i kliknite Otvori.


Bit ćete upitani vjerujete li poslužitelju na koji se spajate. Morate odgovoriti "Da".


Otvorit će se prozor za povezivanje. Koristite root kao svoju prijavu i lozinku poslužitelja kao lozinku. Lozinka se može zalijepiti iz međuspremnika desnom tipkom miša. Ne prikazuje se kada upisujete i lijepite iz sigurnosnih razloga.


Veza je uspješno uspostavljena.

Cygwin ili Unix okruženje na vašem Windows računalu
Kada radite s Linux poslužiteljima, možda ćete trebati slično okruženje na računalu. Vrlo je zgodno koristiti jedan skup uslužnih programa na poslužitelju i radnom računalu, pa svakako isprobajte Cygwin. Linux se na prvi pogled čini kompliciranim. Kako postupno svladavate ovaj OS, Cygwin će vam sve više trebati. Dobre stvari stvaraju ovisnost.

Nestabilna internetska veza pri povezivanju putem SSH - što učiniti?

Često, kada radite preko nestabilne mreže (na primjer, putem 3G/4G mobilnog interneta ili raznih WiFi pristupnih točaka), veza sa SSH se gubi. Pogledajmo što se može učiniti na razini klijenta da se spriječi potreba za ponovnim povezivanjem. Ovi alati nisu prikladni za izvođenje kritičnih operacija na poslužitelju (na primjer, nadogradnja OS-a). Za izvođenje kritičnih operacija morate dodatno koristiti uslužne programe opisane u sljedećem odjeljku članka. Svrha uslužnih programa u ovom odjeljku je učiniti rad putem SSH-a praktičnijim za korisnika.
AutoSSH
AutoSSH pokreće kopiju ssh klijenta i nadzire vezu, po potrebi ponovno pokreće ssh klijent.

Autossh koristi ssh za izgradnju ssh petlje preusmjeravanja (veza s lokalnog računala na udaljeno računalo i obrnuto) i prosljeđuje testne podatke, očekujući da će se vratiti. Također podržava korištenje usluge daljinskog odjeka za slanje povratnih testnih podataka.

AutoSSH podržava samo 3 opcije:

  • -M<порт>[: echo port]- koristi se za određivanje porta za nadzor ili porta za nadzor i porta usluge odjeka. Ako port usluge echo nije naveden, koristi se sljedeći brojčani port. Na primjer, ako je postavljena zastavica -M 20000, testni podaci bit će poslani na port 20000 i primljeni na port 20001. Ako navedete -M 0, praćenje veze bit će onemogućeno i autossh će ponovno pokrenuti ssh samo kada ssh izađe (možete koristite ovo s opcijama ServerAliveInterval i ServerAliveCountMax u OpenSSH ako se nadzor ne može koristiti u vašoj situaciji);
  • -f- šalje autossh u pozadinu čak i prije nego što se ssh pokrene (nećete moći unijeti lozinku u ovom načinu);
  • -V- prikazuje autossh verziju.
Svi ostali argumenti prosljeđuju se kao ssh opcije.

Kako biste osigurali da nakon ponovnog uspostavljanja veze ne morate ponovno unositi lozinku, dopustite ovom korisniku da se prijavi na poslužitelj pomoću ključa, kao što je prikazano u gornjem odjeljku.

Instaliranje AutoSSH-a u Cygwinu na Windowsima
Ako koristite Cygwin u sustavu Windows, unesite:
ažuriranje apt-cyg
apt-cyg instaliraj autossh


Sada se možete spojiti na poslužitelj:
autossh -M 20000 root@ip_adresa_poslužitelja


Veza je uspješno uspostavljena.

Općenito, autossh je prilično zgodan alat za rad preko nestabilnih internetskih veza i za organiziranje SSH tunela na poslužitelju (ovaj ćemo scenarij razmotriti u zasebnom članku). Nedostatak autossh-a je taj što ovaj uslužni program ne rješava problem ako postoje značajna kašnjenja na mreži prilikom unosa naredbi (što se događa na 3G mreži). U tom slučaju čekat ćete odgovor poslužitelja za svaki znak koji unesete, što donekle usporava stvari. Međutim, pod normalnim radnim uvjetima, autossh je od velike pomoći u održavanju SSH veze.

Mogućnost unošenja naredbi bez čekanja na odgovor poslužitelja riješena je Moshom, no kompatibilnost ovog uslužnog programa je još uvijek vrlo ograničena, a pouzdanost niska, pa se za sada ne preporučuje njegova uporaba.

Kako izvesti kritične i dugotrajne operacije na poslužitelju: terminalski multiplekseri

Ako ažurirate OS, instalirate neki softver ili jednostavno uređujete datoteku na poslužitelju, nemojte raditi izravno nakon povezivanja putem ssh ili autossh. Ako je SSH veza zatvorena, izgubit ćete sesiju koja je započeta pri povezivanju putem SSH. Kako biste spriječili da se to dogodi i kada se ponovno povežete putem SSH-a sigurno ćete istog trenutka završiti u tekućoj operaciji na poslužitelju ili u otvorenom prozoru za uređivanje datoteka, koristite terminalske multipleksere na poslužitelju: GNU Screen ili tmux.
GNU zaslon
Zaslonski program izvorno je stvoren za pokretanje više terminalskih sesija unutar jednog terminala. Međutim, screen također ima još jedno korisno svojstvo: mogućnost prekidanja virtualnih sesija s fizičkog terminala i povezivanja s drugim. To vam posebno omogućuje pokretanje dugotrajnih procesa na udaljenim strojevima, bez potrebe da stalno budete prijavljeni na njih.

1. Prijavite se na udaljeni poslužitelj putem SSH-a.
2. Pokrenite ekran tamo
3. Vidjet ćete poruku dobrodošlice, pritisnite Enter.
4. Sada možete učiniti bilo što kao da ste upravo spojeni na poslužitelj putem SSH-a (na primjer, pokrenuti bilo koji dugotrajni proces).
5. Sesiju možete odvojiti pritiskom na CTRL + a zatim d. Možete čak dovršiti SSH vezu s poslužiteljem.
6. Za povratak na sesiju, ponovno se povežite putem SSH (ili će to učiniti autossh) i unesite ekran -r
Vratit ćete se na pokrenutu sesiju, au njoj se nastavlja proces koji ste ranije započeli. Detaljnije ćemo pogledati terminalske multipleksere u sljedećim člancima.

Zaključak

U ovom smo članku pokušali pokriti osnove potrebne za praktičan rad putem SSH-a iz različitih operativnih sustava. Naravno, to nije sve što je moguće, ali je dobra osnova za početak. Ako pronađete grešku u članku, mislite da treba nešto važno dodati ili samo imate pitanje -

SSH (Secure Shell) je mrežni protokol dizajniran za udaljeno upravljanje poslužiteljem i prijenos podataka preko TCP šifriranih veza. Većina usluga hostinga, čak i one virtualne, danas omogućuju pristup putem FTP-a i SSH-a. Po mom mišljenju, ovo je sjajno, SSH je mnogo praktičniji i sigurniji za korištenje.

Postavljanje SSH-a

Postavljanje će se izvršiti za namjenski poslužitelj, VDS, VPS na Debianu, Ubuntuu. Konfiguracijska datoteka se nalazi ovdje: /etc/ssh/sshd_config.
Ako imate običan hosting, sve bi trebalo biti konfigurirano kako treba, idite na odjeljak.

Prema zadanim postavkama, SSHD demon (što je ono što mijenjamo) ne treba nikakve postavke i radi dobro. Napravit ćemo samo nekoliko malih promjena kako bismo ograničili pristup neželjenih osoba poslužitelju.

Kao rezultat netočnih promjena u konfiguracijskoj datoteci, možete izgubiti pristup poslužitelju putem ssh-a, stoga provjerite imate li alternativne opcije za pristup, na primjer korištenjem ISPManager upravljačke ploče.

Kako ograničiti SSH pristup

Sve promjene se vrše u /etc/ssh/sshd_config
Da bi promjene stupile na snagu, morate

Promijeni port

Priključak 9724

Sada, prilikom autorizacije, trebate navesti 9724 umjesto standardnog 22 porta.
Metoda je vrlo jednostavna i učinkovita protiv većine jednostavnih hakerskih robota koji kucaju na standardne portove. Ovdje je glavna stvar ne stvarati sukob s drugim uslugama i odabrati broj koji je očito neiskorišten.

Onemogući komunikaciju korištenjem starog protokola

Ovdje definiramo da je komunikacija moguća samo korištenjem v2 protokola

Ako niste prijavljeni korijen, prije svih naredbi konzole morate dodati sudo - to je kratica za Zamjena korisnika i DO- zamijeniti korisnika i učiniti (pod njim). Na primjer, omogućuje vam izvršavanje naredbi kao superkorisnik korijen.

Smanjite broj pokušaja autorizacije

MaxAuthTries 2

Broj pokušaja zaporke. Zadano je 6. Ako pretraživanje ne uspije, komunikacijska sesija se prekida.

Smanjite vrijeme čekanja na autorizaciju

LoginGraceTime 30s

Prema zadanim postavkama sesija autorizacije može trajati 120 sekundi. Nakon tog vremena završava. 2 minute za autorizaciju su pretjerane, cijelo to vrijeme poslužitelj drži vezu otvorenom, što je vrlo neracionalno. Dovoljno je pola minute.

Zatvori IP pristup

Ako samo vama treba pristup, najjednostavniji i najpouzdaniji način je blokirati pristup sa svih strana osim vaše IP adrese ili, ako je dinamički, onda IP raspona.

  1. Otvorite /etc/hosts.allow i tamo dodajte SSHD: 192.168.1.1

    gdje je 192.168.1.1 vaš IP. Ako imate dinamički IP, definirajte IP s podmrežnom maskom i zapišite svoju podmrežu umjesto IP-a, na primjer:

    SSHD: 192.168.0.0/16

  2. Otvorite /etc/hosts.deny i tamo dodajte: SSHD: ALL

Još jedan način za ograničavanje pristupa putem IP-a

Možete koristiti sljedeću direktivu:

AllowUsers = *@1.2.3.4

Ovdje dopuštamo pristup samo za IP 1.2.3.4

SSH autorizacija putem ključeva

Bit će mnogo sigurnije, praktičnije i ispravnije postaviti ssh autorizaciju bez lozinke. U tu svrhu koristit će se autorizacija ključem.

Dakle, evo uputa:

Veza je konfigurirana. Ako ste nešto pogriješili, prilikom autorizacije pojavit će se greška Server odbijen naš ključ, tj Poslužitelj nije prihvatio naš ključ. U tom slučaju prođite kroz sve točke uzastopce i potražite pogrešku

sažetak: Članak opisuje napredne OpenSSH funkcije koje mogu uvelike pojednostaviti život administratorima sustava i programerima koji se ne boje ljuske. Za razliku od većine vodiča, koji ne opisuju ništa osim tipki i -L/D/R opcija, pokušao sam prikupiti sve zanimljive značajke i pogodnosti koje ssh donosi sa sobom.

Upozorenje: post Vrlo voluminozan, ali zbog lakšeg korištenja odlučio sam ga ne rezati na komade.

Sadržaj:

  • upravljanje ključem
  • kopiranje datoteka putem ssh-a
  • Prosljeđivanje I/O tokova
  • Montiranje udaljenog FS-a putem ssh-a
  • Udaljeno izvršavanje koda
  • Aliasi i opcije za veze u .ssh/config
  • Zadane opcije
  • Prosljeđivanje X poslužitelja
  • ssh kao socks-proxy
  • Port forwarding - naprijed i nazad
  • Obrnuti Sox proxy
  • tuneliranje L2/L3 prometa
  • Prosljeđivanje agenta za autorizaciju
  • Tuneliranje ssh putem ssh kroz nepouzdani poslužitelj ( najvjerojatnije ovo ne znaš)

Upravljanje ključem

Teorija u nekoliko riječi: ssh se ne može prijaviti lozinkom, već ključem. Ključ se sastoji od otvorenog i zatvorenog dijela. Otvoreni se nalazi u početnom direktoriju korisnika koji pristupa poslužitelju, zatvoreni se nalazi u početnom direktoriju korisnika koji ide na udaljeni poslužitelj. Uspoređuju se polovice (pretjerujem) i ako je sve ok, puštaju se. Važno: nije samo klijent ovlašten na poslužitelju, već i poslužitelj u odnosu na klijenta (odnosno, poslužitelj ima svoj ključ). Glavna značajka ključa u usporedbi s lozinkom je da se ne može “ukrasti” hakiranjem poslužitelja - ključ se ne prenosi s klijenta na poslužitelj, a prilikom autorizacije klijent dokazuje poslužitelju da posjeduje ključ (to isto kriptografska magija).

Generiranje ključeva

Možete generirati vlastiti ključ pomoću naredbe ssh-keygen. Ako ne postavite parametre, spremit će sve kako treba.

Ključ se može zaključati lozinkom. Ova se lozinka (u normalnim GUI-jima) traži jednom i pohranjuje neko vrijeme. Ako je zaporka prazna, neće se tražiti kada se koristi. Nemoguće je vratiti zaboravljenu lozinku.

Zaporku za ključ možete promijeniti pomoću naredbe ssh-keygen -str.

Struktura ključa

(ako je na pitanje o lokaciji odgovoreno prema zadanim postavkama).
~/.ssh/id_rsa.pub- javni ključ. Kopira se na poslužitelj gdje trebate dobiti pristup.
~/.ssh/id_rsa- privatni ključ. Ne može se pokazati nikome. Ako ga kopirate i zalijepite u pismo/chat umjesto u pub, tada trebate generirati novi ključ. (Ne šalim se, oko 10% ljudi od kojih tražite ssh ključ objavi id_rsa, a od tih deset posto, 100% su muškarci).

Kopiranje ključa na poslužitelj

U direktoriju korisnika pod kojim se želite prijaviti, ako kreirate datoteku ~/.ssh/ovlašteni_ključevi i tamo stavite javni ključ, možete se prijaviti bez lozinke. Imajte na umu da dopuštenja datoteke ne smiju dopustiti neovlaštenim korisnicima da pišu u ovu datoteku, inače je ssh neće prihvatiti. Zadnje polje u ključu je korisnik@stroj. To nema veze s autorizacijom i služi samo za lakše određivanje gdje je ključ. Imajte na umu da se ovo polje može promijeniti (ili čak izbrisati) bez prekidanja strukture ključa.

Ako znate korisničku lozinku, postupak se može pojednostaviti. Tim ssh-copy-id korisnik@poslužitelj omogućuje vam kopiranje ključa bez ručnog uređivanja datoteka.

Napomena: stari ssh priručnici spominju authorized_keys2. Razlog: postojala je prva verzija ssh-a, zatim druga (trenutna), napravili su vlastiti skup konfiguracija za nju, svi su bili jako umorni od toga, a druga verzija se prebacila na verzije bez ikakve duge "2" nekoć. Odnosno, uvijek authorized_keys i ne razmišljajte o različitim verzijama.

Ako imate ssh na nestandardnom portu, tada ssh-copy-id zahtijeva poseban trik pri radu: ssh-copy-id "-p 443 user@server" (obratite pažnju na navodnike).

Ključ poslužitelja

Kada se prvi put prijavite na poslužitelj, ssh vas pita vjerujete li ključu. Ako odgovorite ne, veza je prekinuta. Ako da, ključ se sprema u datoteku ~/.ssh/poznati_hostovi. Nemoguće je saznati gdje je koji ključ (jer nije siguran).

Ako se ključ poslužitelja promijenio (na primjer, poslužitelj je ponovno instaliran), ssh vrišti da je ključ krivotvoren. Imajte na umu da ako poslužitelj nije dotaknut, ali ssh vrišti, tada provaljujete na pogrešan poslužitelj (na primjer, drugo računalo s istim IP-om pojavilo se na mreži, sve vrste lokalnih mreža s 192.168.1.1, od kojih ima nekoliko milijuna u svijetu, posebno pate od ovoga) . Scenarij "zli čovjek u sredini napada" je malo vjerojatan, češće je samo pogreška s IP-om, iako ako je "sve u redu" i ključ se promijenio, to je razlog da se razina paranoje podigne za nekoliko razina (i ako imate autorizaciju pomoću ključa, a poslužitelj iznenada traži lozinku - tada se paranoja može uključiti 100% i ne morate unositi lozinku).

Naredbom možete izbrisati poznati ključ poslužitelja ssh-keygen -R poslužitelj. U tom slučaju također morate obrisati IP ključ (oni se zasebno pohranjuju): ssh-ključ -R 127.0.0.1.

Ključ poslužitelja pohranjen je u /etc/ssh/ssh_host_rsa_ključ I /etc/ssh/ssh_host_rsa_key.pub. Oni mogu biti:
a) kopirajte sa starog poslužitelja na novi.
b) generirajte pomoću ssh-keygena. Nema potrebe za navođenjem lozinke (tj. prazno). Ssh poslužitelj neće moći koristiti ključ sa lozinkom.

Imajte na umu da ako klonirate poslužitelje (na primjer, u virtualnim strojevima), tada se ssh ključevi poslužitelja moraju ponovno generirati.

Bolje je ukloniti stare ključeve iz know_hosts, inače će se ssh žaliti na dupli ključ.

Kopiranje datoteka

Prijenos datoteka na poslužitelj ponekad može biti zamoran. Osim petljanja sa sftp-om i drugim čudnim stvarima, ssh nam daje naredbu scp, koji kopira datoteku putem ssh sesije.

Scp put/moja datoteka [e-mail zaštićen]:/puni/put/do/nove/lokacije/

Možete učiniti i suprotno:
scp [e-mail zaštićen]:/puni/put/do/datoteke /put/do/put/ovdje

Riba upozorenje: Unatoč činjenici da se mc može spojiti putem ssh-a, kopiranje velikih datoteka bit će vrlo bolno, jer... fish (mc modul za rad sa ssh-om kao virtualni fs) je jako spor. 100-200kb je granica, tada počinje test strpljenja. (Sjetio sam se svoje rane mladosti, kada sam, ne znajući za scp, kopirao ~5GB preko fish-a na mc, trebalo je nešto više od 12 sati na FastEthernetu).

Mogućnost kopiranja je sjajna. Ali želim "spremiti kao" - i odmah na poslužitelj. A kako biste kopirali u grafičkom načinu rada ne iz posebnog programa, već iz bilo kojeg poznatog.

Ovo je također moguće:

sshfs

Teorija: Modul osigurača omogućuje vam "izvoz" zahtjeva u datotečni sustav iz kernela natrag u korisnički prostor u odgovarajući program. Ovo omogućuje jednostavnu implementaciju "pseudo datotečnih sustava". Na primjer, možemo omogućiti pristup udaljenom datotečnom sustavu putem ssh-a tako da sve lokalne aplikacije (uz nekoliko iznimaka) neće ništa posumnjati.

Zapravo, postoji iznimka: O_DIRECT nije podržan, nažalost (ovo nije sshfs problem, ovo je općenito problem s osiguračem).

Upotreba: instalirajte sshfs paket (povući će osigurač sa sobom).

Zapravo, primjer moje skripte koja montira desunote.ru (nalazi se na mom kućnom računalu - slike su iz njega prikazane u ovom članku) na moje prijenosno računalo:

#!/bin/bash sshfs desunote.ru:/var/www/desunote.ru/ /media/desunote.ru -o ponovno povezivanje

Napravimo datoteku +x, pozovemo je, odemo u bilo koju aplikaciju, kažemo spremi i vidimo:

sshfs opcije koje mogu biti važne: -o ponovno povezivanje (kaže pokušaj ponovnog povezivanja umjesto pogreške).

Ako puno radite s podacima iz roota, tada možete (trebali) napraviti idmap:

-o idmap=korisnik. Radi na sljedeći način: ako se povežemo kao korisnik pupkin@server i lokalno radimo kao korisnik vasiliy, tada kažemo "pretpostavimo da su datoteke pupkin vasiliy datoteke." dobro, ili “root”, ako se povezujemo kao root.

U mom slučaju, idmap nije potreban, jer su korisnička imena (lokalno i udaljeno) ista.

Imajte na umu da možemo raditi udobno samo ako imamo ssh ključ (vidi početak članka), ako nema, autorizacija lozinke je dosadna za 2-3 veze.

Možete ga ponovno onemogućiti pomoću naredbe fusermount -u /staza, međutim, ako je veza zapela (na primjer, nema mreže), tada možete/trebate učiniti ovo iz korijena: sudo umount -f /path.

Udaljeno izvršavanje koda

ssh može izvršiti naredbu na udaljenom poslužitelju i odmah zatvoriti vezu. Najjednostavniji primjer:

Ssh korisnik@poslužitelj ls /etc/

Prikazat će sadržaj /etc/ na poslužitelju, dok ćemo imati lokalnu naredbenu liniju.

Neke aplikacije žele imati kontrolni terminal. Treba ih pokrenuti s -t opcijom:
ssh korisnik@poslužitelj -t remove_command

Usput, možemo napraviti nešto poput ovoga:
ssh korisnik@poslužitelj cat /some/file|awk "(print $2)" |local_app

To nas dovodi do sljedeće značajke:

Naprijed stdin/out

Recimo da želimo uputiti zahtjev programu na daljinu, a zatim staviti njegov izlaz u lokalnu datoteku

Ssh [e-mail zaštićen] naredba >moja_datoteka

Recimo da želimo daljinski ispisati lokalni izlaz

Moja naredba |scp - [e-mail zaštićen]:/put/udaljena_datoteka

Zakomplicirajmo primjer - možemo prenositi datoteke s poslužitelja na poslužitelj: Napravimo lanac da stavimo stdin na 10.1.1.2, koji nam nije dostupan izvana:

Moja naredba | ssh [e-mail zaštićen]"scp - [e-mail zaštićen]:/put/do/datoteke"

Postoji i takva zagonetna tehnika korištenja cijevi (ljubazno predložena u komentarima na LJ):

Tar -c * | ssh korisnik@poslužitelj "cd && tar -x"

Tar pakira datoteke po maski lokalno, piše ih u stdout, odakle ih ssh čita, prenosi ih u stdin na udaljenom poslužitelju, gdje ih cd ignorira (ne čita stdin), a tar ih čita i raspakira. Tako reći, scp je za siromašne.

Aliasi

Da budem iskren, nisam to znao niti koristio do nedavno. Pokazalo se da su vrlo zgodni.

U više ili manje velikoj tvrtki često se ispostavi da imena poslužitelja izgledaju ovako: spb-MX-i3.extrt.int.company.net. A tamo korisnik nije ravan lokalnom. Odnosno, morate se prijaviti ovako: ssh [e-mail zaštićen]. Svaki put kad tipkate, neće vam biti dosta sindroma tunela. U malim tvrtkama problem je suprotan - nitko ne razmišlja o DNS-u, a pristup poslužitelju izgleda ovako: ssh [e-mail zaštićen]. Ukratko, ali ipak dosadno. Još je veća drama ako imamo nestandardni port, pa npr. prvu verziju ssh-a (pozdrav Ciscovcima). Tada sve izgleda ovako: ssh -1 -p 334 [e-mail zaštićen]. Objesite se. O drami sa scp-om ne želim ni govoriti.

Možete registrirati pseudonime za cijeli sustav na IP (/etc/hosts), ali ovo je krivo rješenje (još uvijek se ispisuju i korisnik i opcije). Postoji kraći put.

Datoteka ~/.ssh/config omogućuje vam postavljanje parametara veze, uključujući one specifične za poslužitelje, što je najvažnije, različite za svaki poslužitelj. Evo primjera konfiguracije:

Domaćin ric Ime glavnog računala ooo-horns-and-hooves.rf Administrator korisnika ForwardX11 da Kompresija da Home Home Ime glavnog računala myhome.dyndns.org Korisnik vasya PasswordAuthentication ne

Sve dostupne opcije mogu se vidjeti u man ssh_config(ne brkati sa sshd_config).

Zadane opcije

Prema UUSER savjetu: možete navesti zadane postavke veze pomoću Host * konstrukcije, tj., na primjer:

Domaćin * Korijen korisnika Kompresija da

Isto se može učiniti u /etc/ssh/ssh_config (ne brkati s /etc/ssh/ssh d _config), ali to zahtijeva root prava i odnosi se na sve korisnike.

Prosljeđivanje X poslužitelja

Zapravo, malo sam pokvario ovaj dio u gornjem primjeru konfiguracije. ForwardX11 je upravo to.

Teorija: Grafičke aplikacije u Unixu obično koriste X poslužitelj (wayland je na putu, ali još nije spreman). To znači da se aplikacija pokreće i spaja na X poslužitelj za crtanje. Drugim riječima, ako imate goli poslužitelj bez gui-a i lokalni x poslužitelj (gdje radite), tada možete dopustiti aplikacijama s poslužitelja da crtaju na vašoj radnoj površini. Povezivanje s udaljenim X poslužiteljem obično nije najsigurnija ili najtrivijalnija stvar. SSH vam omogućuje da pojednostavite ovaj proces i učinite ga potpuno sigurnim. A mogućnost smanjenja prometa također vam omogućuje da prođete s manje prometa (odnosno smanjenje iskorištenosti kanala, odnosno smanjenje pinga (točnije latencije), odnosno smanjenje kašnjenja).

Tipke: -X - prosljeđivanje X poslužitelja. -Y prosljeđivanje autorizacije.

Samo trebate zapamtiti kombinaciju ssh -XYC korisnik@SERVER.
U gornjem primjeru (nazivi tvrtki su izmišljeni), spajam se na poslužitelj ooo-horns-i-kopyta.rf s razlogom, ali kako bih dobio pristup Windows poslužitelju. Svi znamo Microsoftovu sigurnost pri radu na mreži, tako da je neugodno izlagati goli RDP vani. Umjesto toga, spajamo se na poslužitelj putem ssh-a, a zatim tamo pokrećemo naredbu rdesktop:
ssh ric
rdesktop -k en-us 192.168.1.1 -g 1900x1200

I jedno čudo, prozor za prijavu u windowse na našoj radnoj površini. Imajte na umu da je pažljivo šifriran i ne razlikuje se od uobičajenog ssh prometa.

Čarape-proxy

Kad se nađem u nekom drugom hotelu (kafić, konferencija), lokalni wifi se najčešće pokaže užasnim - zatvoreni portovi, nepoznata razina sigurnosti. I nema puno povjerenja u tuđe pristupne točke (nije to paranoja, vidio sam kako se kradu lozinke i kolačići preko banalnog laptopa koji svima distribuira 3G na ime obližnjeg kafića (i pritom piše zanimljive stvari) )).

Poseban problem predstavljaju zatvorene luke. Ili će se zatvoriti Jabber, pa IMAP ili nešto treće.

Obični VPN (pptp, l2tp, openvpn) ne radi u takvim situacijama - jednostavno nije dopušten. Eksperimentalno je poznato da se port 443 najčešće ostavlja, i to u CONNECT modu, odnosno prosljeđuje se "kakav jest" (obični http također može biti transparentno umotan u SQUID).

Rješenje je čarape-punomoćnik način rada ssh. Njegov princip: ssh klijent povezuje se s poslužiteljem i sluša lokalno. Nakon što primi zahtjev, šalje ga (putem otvorene veze) poslužitelju, poslužitelj prema zahtjevu uspostavlja vezu i šalje sve podatke natrag ssh klijentu. I odgovara osobi koja je pitala. Da bi radilo, trebate reći aplikacijama da "koristi socks-proxy". I odredite proxy IP adresu. U slučaju ssh-a, to je najčešće localhost (na ovaj način nećete dati svoj kanal strancima).

Veza u sock-proxy modu izgleda ovako:
ssh -D 8080 korisnik@poslužitelj

Zbog činjenice da je wifi drugih ljudi najčešće ne samo loš, nego i spor, može biti dobra ideja uključiti opciju -C (sažimanje prometa). Ispada skoro kao opera turbo (samo što ne pritišće slike). U pravom surfanju po http-u potrebno je oko 2-3 puta (čitaj - ako imate nesreću 64kbita, onda ćete stranice od megabajta otvoriti ne za dvije minute, već za 40 sekundi. Bezveze je, ali je još bolje). Ali glavna stvar: nema ukradenih kolačića ili prisluškivanih sesija.

Nisam uzalud rekao o zatvorenim lukama. Port 22 se zatvara na potpuno isti način kao i "nepotrebni" jabber port. Rješenje je objesiti poslužitelj na port 443. Ne isplati se uklanjati s 22, ponekad postoje sustavi s DPI (dubokom inspekcijom paketa) koji neće dopustiti vaš "pseudo-ssl".

Ovako izgleda moja konfiguracija:

/etc/ssh/sshd_config:
(fragment)
Priključak 22
Priključak 443

A ovdje je dio ~/.ssh/config s laptopa koji opisuje vpn

Host vpn Naziv hosta desunote.ru Korisnik vasya Kompresija da DynamicForward 127.1:8080 Port 443

(obratite pažnju na lijeni oblik pisanja localhost - 127.1, ovo je potpuno legalna metoda za pisanje 127.0.0.1)

Port prosljeđivanje

Prelazimo na krajnje teško razumljiv dio SSH funkcionalnosti, koji vam omogućuje izvođenje zagonetnih operacija TCP tuneliranja "od poslužitelja" i "do poslužitelja".

Da bismo razumjeli situaciju, svi primjeri u nastavku odnosit će se na ovaj dijagram:

Komentari: Dvije sive mreže. Prva mreža nalikuje tipičnoj uredskoj mreži (NAT), druga je "gateway", odnosno poslužitelj s bijelim sučeljem i sivim okrenutim prema vlastitoj privatnoj mreži. U daljnjem razmišljanju pretpostavljamo da je "naše" prijenosno računalo A, a "poslužitelj" B.

Zadatak: Imamo aplikaciju koja radi lokalno, moramo dopustiti drugom korisniku (izvan naše mreže) da je vidi.

Rješenje: proslijedite lokalni port (127.0.0.1:80) na javno dostupnu adresu. Recimo da je naš "javno dostupan" B zauzeo port 80 nečim korisnim, pa ćemo proslijediti na nestandardni port (8080).

Konačna konfiguracija: zahtjevi za 8.8.8.8:8080 ići će lokalnom hostu prijenosnog računala A.

Ssh -R 127.1:80:8.8.8.8:8080 [e-mail zaštićen]

Opcija -R omogućuje preusmjeravanje s daljinskog upravljača ( R emote) priključak poslužitelja na vlastiti (lokalni).
Važno: ako želimo koristiti adresu 8.8.8.8, tada moramo omogućiti GatewayPorts u postavkama poslužitelja B.
Zadatak. Na poslužitelju "B" određeni demon (na primjer, sql poslužitelj) sluša. Naša aplikacija nije kompatibilna sa serverom (različiti bitrate, OS, zli admin koji zabranjuje i nameće limite itd.). Želimo lokalno pristupiti udaljenom lokalnom hostu.

Konačna konfiguracija: zahtjeve prema localhost:3333 na "A" trebao bi posluživati ​​demon na localhost:3128 "B".

Ssh -L 127.1:3333:127.1:3128 [e-mail zaštićen]

Opcija -L omogućuje lokalne pozive ( L ocal) izravno na udaljeni poslužitelj.

Zadatak: Na poslužitelju “B” određeni servis sluša na sivom sučelju i želimo dati kolegi (192.168.0.3) priliku da pogleda ovu aplikaciju.

Konačna konfiguracija: zahtjevi na našu sivu IP adresu (192.168.0.2) idu na sivo sučelje poslužitelja B.

Ssh -L 192.168.0.2:8080:10.1.1.1:80 [e-mail zaštićen]

Ugniježđeni tuneli

Naravno, tunele je moguće preusmjeriti.

Zakomplicirajmo zadatak: sada želimo našem kolegi pokazati aplikaciju koja radi na lokalnom hostu na poslužitelju s adresom 10.1.1.2 (na portu 80).

Rješenje je komplicirano:
ssh -L 192.168.0.2:8080:127.1:9999 [e-mail zaštićen] ssh -L 127.1:9999:127.1:80 [e-mail zaštićen]

Što se događa? Kažemo ssh-u da preusmjeri lokalne zahtjeve s naše adrese na localhost poslužitelja B i odmah nakon povezivanja pokrene ssh (tj. ssh klijent) na poslužitelju B s opcijom slušanja na localhost i prosljeđuje zahtjeve na poslužitelj 10.1.1.2 (gdje klijent bi se trebao povezati). Port 9999 odabran je proizvoljno, glavno je da se podudara u prvom pozivu iu drugom.

Obrnuti Sox proxy

Ako vam se prethodni primjer činio jednostavnim i očitim, pokušajte pogoditi što će ovaj primjer učiniti:
ssh -D 8080 -R 127.1:8080:127.1:8080 [e-mail zaštićen] ssh -R 127.1:8080:127.1:8080 [e-mail zaštićen]

Ako ste zaštitar čiji je zadatak zabraniti korištenje interneta na serveru 10.1.1.2, onda možete početi čupati dlake na guzici jer ova naredba organizira pristup internetu za server 10.1.1.2 preko sox proxyja koji radi na računalu “A”. Promet je u potpunosti šifriran i ne razlikuje se od bilo kojeg drugog SSH prometa. A odlazni promet s računala, sa stajališta mreže “192.168.0/24”, ne razlikuje se od redovnog prometa računala A.

Tuneliranje

Ako do ovog trenutka zadnjica sigurnosnog odjela ne blista i ssh još uvijek nije na popisu broj jedan sigurnosnih neprijatelja, evo konačnog ubojice svega: IP tuneliranja ili čak etherneta. U najradikalnijim slučajevima, ovo vam omogućuje tuneliranje dhcp-a, daljinsko lažiranje arp-a, buđenje na lanu i druge nedostatke druge razine.

(jao, nisam ovo osobno koristio).

Lako je razumjeti da je u takvim uvjetima nemoguće uhvatiti takve tunele nikakvim DPI-jem (duboka inspekcija paketa) - ili je ssh dopušten (čitaj - radi što god hoćeš), ili je ssh zabranjen (i možete slobodno odustati od takvog društvo idiota bez imalo žaljenja).

Prosljeđivanje autorizacije

Ako mislite da je to sve, onda......međutim, za razliku od autora koji još nije pisao "odozdo", čitatelj unaprijed vidi da je ispod mnogo slova i da nema intrige.

OpenSSH vam omogućuje korištenje poslužitelja kao odskočne daske za povezivanje s drugim poslužiteljima, čak i ako su ti poslužitelji nepouzdani i mogu se zlorabiti kako žele.

Ponovit ću sliku:

Recimo da se želimo spojiti na poslužitelj 10.1.1.2, koji je spreman prihvatiti naš ključ. Ali ne želimo ga kopirati na 8.8.8.8, jer je to javno dvorište i pola ljudi ima sudo i mogu čeprkati po tuđim imenicima. Kompromis bi bio imati "drugačiji" ssh ključ koji bi autorizirao [e-mail zaštićen] na 10.1.1.2, ali ako ne želimo pustiti bilo koga s 8.8.8.8 na 10.1.1.2, onda to nije opcija (pogotovo jer ne samo da mogu koristiti ključ, već ga i kopirati za sebe “za kišni dan”).

Ssh nudi mogućnost prosljeđivanja ssh agenta (ovo je usluga koja traži lozinku za ključ). Opcija ssh -A prosljeđuje autorizaciju na udaljeni poslužitelj.

Poziv izgleda ovako:

Ssh-A [e-mail zaštićen] ssh [e-mail zaštićen]

Udaljeni ssh klijent (na 8.8.8.8) može dokazati 10.1.1.2 da smo mi samo ako smo spojeni na ovaj poslužitelj i dali smo ssh klijentu pristup njegovom autorizacijskom agentu (ali ne ključu!).

U većini slučajeva radi.

Međutim, ako je poslužitelj potpuno loš, tada root poslužitelja može koristiti utičnicu za lažno predstavljanje kada smo povezani.

Postoji još moćnija metoda - ona pretvara ssh u jednostavnu cijev (u smislu "cijevi") kroz koju radimo s udaljenim poslužiteljem.

Glavna prednost ove metode je njezina potpuna neovisnost o povjerenju posredničkog poslužitelja. Može koristiti lažni ssh poslužitelj, bilježiti sve bajtove i sve radnje, presresti sve podatke i krivotvoriti ih kako želi - interakcija se odvija između "rezultirajućeg" poslužitelja i klijenta. Ako su podaci krajnjeg poslužitelja krivotvoreni, tada se potpis neće podudarati. Ako se podaci ne mijenjaju, tada se sesija uspostavlja u sigurnom načinu rada, tako da se nema što presresti.

Nisam znao za ovu cool postavku, pa sam je iskopao redrampage.

Postavljanje se temelji na dvije opcije ssh: opcija -W (koja pretvara ssh u "cijev") i opcija konfiguracije ProxyCommand(čini se da nema opcije naredbenog retka), koja kaže "pokreni program i spoji ga na njegov stdin/out". Ove opcije su se nedavno pojavile, pa su korisnici centos-a u problemu.

To izgleda ovako (brojevi za gornju sliku):

Ssh/konfiguracija:
Host raep HostName 10.1.1.2 Korisnik user2 ProxyCommand ssh -W %h:%p [e-mail zaštićen]

Pa, veza je trivijalna: ssh raep .

Dopustite mi da ponovim važnu točku: poslužitelj 8.8.8.8 ne može presresti ili lažirati promet, koristiti agenta za autorizaciju korisnika ili na drugi način modificirati promet. Zabraniti - da, može. Ali ako to dopustite, proći će kroz vas bez dešifriranja ili modifikacije. Da bi konfiguracija radila, trebate imati vlastiti javni ključ u authorized_keys kao za [e-mail zaštićen], i u [e-mail zaštićen]

Naravno, veza može biti opremljena svim ostalim sitnicama - prosljeđivanjem portova, kopiranjem datoteka, socks proxyjima, L2 tunelima, tuneliranjem X poslužitelja itd.
ssh tuneliranje Dodajte oznake

Najbolji članci na temu