Ús i configuració d'ordres SSH més habituals a Linux


Breu: en aquesta guia, parlarem dels casos d'ús habituals de SSH. També parlarem de les configuracions SSH d'ús habitual que es poden utilitzar en el dia a dia per augmentar la vostra productivitat.

Secure Shell (SSH) és un protocol de xarxa àmpliament adoptat, que ens permet interactuar amb amfitrions remots de manera segura. Proporciona seguretat xifrant totes les comunicacions entre ells.

Com utilitzar l'ordre SSH a Linux

En aquesta secció, parlarem d'alguns dels casos d'ús populars del protocol SSH.

Hi ha diverses maneres d'interactuar amb hosts Linux remots mitjançant protocols com telnet, netcat, etc. No obstant això, aquests no són segurs a causa de l'absència de xifratge. Podem utilitzar el protocol SSH per permetre una comunicació segura entre els hosts.

Hem d'utilitzar un client SSH per interactuar amb l'amfitrió remot. Hi ha un munt de clients basats en GUI i CLI disponibles per a Linux. Tanmateix, al llarg d'aquesta guia, utilitzarem una utilitat de línia d'ordres anomenada ssh. Per defecte, la utilitat ssh està disponible a la majoria de distribucions de Linux.

La sintaxi de l'ordre SSH és la següent:

$ ssh [OPTIONS]  [COMMANDS] [ARGS]

Aquí, els claudàtors ([]) representen els arguments opcionals mentre que els claudàtors (<>) representen els arguments obligatoris.

Connectem-nos a l'amfitrió remot mitjançant el client ssh:

$ ssh -l root 192.168.19.130

En aquest exemple, hem especificat el nom d'inici de sessió mitjançant l'opció -l i la destinació és 192.168.19.130. La connexió SSH s'estableix després d'introduir la contrasenya correcta. Ara en endavant, podem executar les ordres a l'amfitrió remot igual que el sistema local.

# hostname

Per finalitzar la sessió, podem utilitzar l'ordre de sortida o la combinació de tecles ctrl+D.

És important tenir en compte que ens hem d'autenticar amb l'amfitrió remot per a cada nova sessió. Per evitar introduir contrasenyes cada vegada, podem configurar un inici de sessió SSH sense contrasenya.

A la secció anterior, vam veure com establir una connexió amb un host remot, que només és adequat quan anem a utilitzar l'amfitrió remot durant una durada més llarga. De vegades, només necessitem executar una o dues ordres a l'amfitrió remot. En aquests casos, podem executar aquestes ordres sense crear una sessió a llarg termini.

Executem l'ordre hostname a l'amfitrió remot:

$ ssh -l root 192.168.19.130 hostname

De manera similar, podem executar diverses ordres en una màquina Linux remota:

$ ssh -l root 192.168.19.130 'hostname; pwd'

És important tenir en compte que les ordres s'han d'incloure entre cometes i separades pel caràcter de punt i coma (;). Si voleu executar ordres en diversos amfitrions Linux remots, llegiu el nostre article - Pssh - Executeu ordres en diversos hosts Linux remots.

De manera similar a les ordres, també podem executar un script local a l'amfitrió remot. Entenem-ho amb un exemple.

Primer, creeu un script d'intèrpret d'ordres senzill en una màquina local amb permisos executables:

$ cat script.sh 

hostname
pwd

Ara, anem a executar-lo a l'amfitrió remot:

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

En aquest exemple, hem utilitzat l'opció -s del bash per llegir l'script des de l'entrada estàndard.

Treballem amb els fitxers i directoris molt sovint. Una operació habitual que fan els usuaris és copiar directoris i fitxers. Igual que les màquines locals, podem copiar fitxers i directoris entre els hosts remots mitjançant l'ordre scp, que copia els fitxers de manera segura mitjançant el protocol SSH.

Copiem el fitxer script.sh al directori /tmp de l'amfitrió remot:

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

Ara, comproveu que s'hagi copiat el fitxer:

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

De manera similar, podem utilitzar l'ordre scp per copiar els directoris. Tanmateix, hem d'utilitzar l'opció -r amb l'ordre.

SSH admet la compressió de dades mitjançant l'algoritme de compressió gzip, que comprimeix tots els fluxos de dades possibles, com ara stdin, stdout, stderr, etc. Aquesta opció és molt útil quan s'utilitzen connexions de xarxa lentes.

Podem habilitar la compressió a SSH mitjançant l'opció -C:

$ ssh -C -l root 192.168.19.130 'hostname' 

Els usuaris de Linux sovint necessiten depurar sessions SSH per investigar diversos problemes relacionats amb la configuració i la connexió SSH. En aquests casos, podem habilitar el mode detallat que imprimeix els registres de depuració de la sessió actual.

Activem el mode detallat mitjançant l'opció -v:

$ ssh -v -l root 192.168.19.130 hostname

A més d'això, podem augmentar el nivell de verbositat utilitzant les múltiples opcions -v.

  • -v: estableix el nivell de verbositat a 1 i proporciona detalls sobre les activitats del client.
  • -vv: estableix el nivell de verbositat en 2 i proporciona detalls sobre les activitats del client i del servidor.
  • -vvv: estableix el nivell de verbositat en 3 i proporciona informació més detallada sobre les activitats del client i del servidor.

El nivell màxim de verbositat suportat per SSH és 3. Vegem-ho en acció:

$ ssh -vvv -l root 192.168.19.130 hostname

A l'exemple anterior, debug1 representa el missatge de depuració habilitat pel nivell de verbositat 1. De la mateixa manera, debug2 i debug3 representen els missatges de depuració habilitats pels nivells de verbositat 2 i 3, respectivament.

Podem utilitzar seqüències d'escapament amb SSH per gestionar les sessions del terminal del client. Parlem de les seqüències d'escapament d'ús habitual amb els casos d'ús adequats.

De vegades, hem de realitzar algunes activitats a la màquina local sense finalitzar la sessió SSH actual. En aquest escenari, podem suspendre la sessió actual utilitzant la seqüència de tecles ~ + ctrl+z.

Primer, inicieu sessió a l'amfitrió remot i executeu l'ordre de nom d'amfitrió:

$ ssh -l root 192.168.19.130
# hostname

A continuació, per suspendre la sessió actual, primer escriviu el caràcter tilde (~) i després premeu les tecles ctrl+z. És important tenir en compte que el caràcter de tilde (~) no es mostrarà a l'exterior fins que premem ctrl+z.

Ara, comprovem que la sessió s'ha suspès:

$ jobs

Aquí, podem veure que la sessió SSH actual s'està executant en segon pla.

Reprendrem la sessió de nou utilitzant l'ordre fg i executem l'ordre hostname:

$ fg %1

Estic segur que heu vist les sessions SSH congelades, que succeeixen quan la sessió s'interromp per una xarxa inestable. Aquí, no podem avortar la sessió mitjançant l'ordre de sortida. Tanmateix, podem acabar-lo utilitzant la seqüència de tecles \~ + .\.

Primer, inicieu sessió a l'amfitrió remot:

$ ssh -l root 192.168.19.130

Ara feu servir la combinació de tecles \~ + .\ per finalitzar la sessió actual.

En aquest exemple, podem veure que SSH mostra el missatge - Connexió a 192.168.19.130 tancada.

Una cosa interessant és que hi ha una seqüència d'escapada per enumerar totes les seqüències d'escapament admeses. Podem utilitzar la seqüència d'escapada \~ + ? per llistar les seqüències d'escapament admeses:

Aquí, hem de prémer la tecla Intro per sortir del menú d'ajuda.

Com configurar SSH a Linux

En aquesta secció, parlarem de la configuració del servidor per endurir el servidor SSH. El servidor SSH emmagatzema tota la seva configuració al fitxer /etc/ssh/sshd_config. És important tenir en compte que l'accés de l'usuari root és necessari per actualitzar la configuració SSH.

Com a pràctica recomanada, sempre hauríem de mostrar el bàner abans d'establir una connexió SSH. En alguns casos, desanima els usuaris no autoritzats a accedir a amfitrions remots. Vegem com activar aquesta configuració pas a pas.

Primer, creeu un fitxer de text en un servidor remot amb un missatge d'advertència:

# vi /etc/banner.txt 

A continuació, afegiu el següent missatge de bàner:

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

A continuació, obriu el fitxer /etc/ssh/sshd_config i especifiqueu el fitxer amb la directiva Banner:

Banner /etc/banner.txt

Ara, reinicieu el servei sshd i finalitzeu la sessió amb l'ordre de sortida:

# systemctl restart sshd
# exit

Finalment, verifiqueu el bàner iniciant sessió a l'amfitrió remot:

$ ssh -l root 192.168.19.130

Aquí, podem que el servidor mostri correctament el bàner SSH.

Fins ara, hem utilitzat l'usuari root per accedir a l'amfitrió remot. Tanmateix, això va en contra del principi del mínim privilegi. En un entorn de producció, l'accés dels usuaris root sempre està restringit per millorar la seguretat.

Podem utilitzar la directiva PermitRootLogin per desactivar l'inici de sessió de l'usuari root.

Primer, obriu el fitxer /etc/ssh/sshd_config i utilitzeu l'opció no amb la directiva PermitRootLogin:

PermitRootLogin no

Ara, reinicieu el servei sshd i finalitzeu la sessió amb l'ordre de sortida:

# systemctl restart sshd
# exit

Finalment, verifiqueu-ho creant una nova sessió SSH:

$ ssh -l root 192.168.19.130

Aquí, podem observar que no podem iniciar sessió a l'amfitrió remot amb l'usuari root. Per permetre la sessió d'usuari root podem utilitzar l'opció yes amb la mateixa directiva.

Per defecte, SSH utilitza el port TCP 22. Tanmateix, podem configurar SSH perquè s'executi en un port diferent, és a dir, 8088.

Primer, obriu el fitxer /etc/ssh/sshd_config i utilitzeu el valor 8088 amb la directiva Port:

Port 8088

A continuació, reinicieu el servei sshd i finalitzeu la sessió:

# systemctl restart sshd
# exit

Ara, iniciem la sessió a l'amfitrió remot:

$ ssh -p 8088 -l root 192.168.19.130

En aquest exemple, hem utilitzat l'opció -p per especificar el número de port.

En alguns casos, hem de realitzar uns quants passos més per permetre la comunicació en un port no predeterminat. Com identificar els ports disponibles, actualitzar les regles del tallafoc, la configuració de SELinux, etc.

En aquest article, vam parlar del protocol SSH i dels seus casos d'ús habituals. A continuació, vam parlar d'algunes opcions comunes. Finalment, vam parlar d'algunes de les configuracions per protegir el servidor SSH.

Coneixeu algun altre millor ús d'ordres SSH a Linux? Feu-nos saber les vostres opinions als comentaris a continuació.