Salta el contingut

MP08 - Des del CMD

Windows incorpora darrerament un client ssh que podem activar des del CMD. D'aquesta manera, per connectar-nos al servidor, si aquest té el servei ssh instal·lat i iniciat, no ens cal cap altra eina.

Client ssh des de la terminal CMD

Per iniciar sessió en un servidor remot des del Windows, podem utilitzar la comanda ssh

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

Així doncs, utilitzarem la comanda ssh, en la forma més bàsica, de la següent forma:

ssh usuari@ipDelServidor

També podem optar per obrir algun dels ports del servidor i mapejar-lo al nostre PC local amb la opció -L.

ssh -L <port-local-escolta>:<host-remot>:<port-remot> <servidor-ssh>
Per exemple, la següent comanda:

ssh -L 8000:127.0.0.1:80 usuari@ipDelServidor

ens permet accedir al servidor web a través del nostre propi ordinador pel port 8000. Caldria, doncs, accedir a http://localhost:8000

O bé, si no tenim el port 80 local ocupat

ssh -L 80:127.0.0.1:80 usuari@ipDelServidor

ens permet accedir al servidor web a través del nostre propi ordinador pel port 80. Caldria, doncs, accedir a http://localhost

tar

La comanda tar, ara també disponible des del CMD i la PowerShell de Windows, ens permet empaquetar tot un directori, o un conjunt de fitxers, dins d'un sol fitxer que fins i tot podem comprimir.

Ajuda del tar de Windows: tar -h
tar(bsdtar): manipulate archive files
First option must be a mode specifier:
  -c Create  -r Add/Replace  -t List  -u Update  -x Extract
Common Options:
  -b #  Use # 512-byte records per I/O block
  -f <filename>  Location of archive (default \\.\tape0)
  -v    Verbose
  -w    Interactive
Create: tar -c [options] [<file> | <dir> | @<archive> | -C <dir> ]
  <file>, <dir>  add these items to archive
  -z, -j, -J, --lzma  Compress archive with gzip/bzip2/xz/lzma
  --format {ustar|pax|cpio|shar}  Select archive format
  --exclude <pattern>  Skip files that match pattern
  -C <dir>  Change to <dir> before processing remaining files
  @<archive>  Add entries from <archive> to output
List: tar -t [options] [<patterns>]
  <patterns>  If specified, list only entries that match
Extract: tar -x [options] [<patterns>]
  <patterns>  If specified, extract only entries that match
  -k    Keep (don't overwrite) existing files
  -m    Don't restore modification times
  -O    Write entries to stdout, don't restore to disk
  -p    Restore permissions (including ACLs, owner, file flags)
bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp

Per tant podem comprimir tot un directori amb la segünet comanda:

tar cvfz fitxer.tar.gz directori

Una vegada tinguem aquest fitxer al servidor web, el podem descomprimir amb la mateixa comanda tar substituint el caràcter c (create) per x (extract).

tar xvfz fitxer.tar.gz

fins i tot podem especificar-li el directori on volem descomprimir-ho amb la opció C.

tar xvfz fitxer.tar.gz -C directori

scp

La comanda scp, ara també disponible des del CMD i la PowerShell de Windows, ens permet copiar fitxers a través d'una connexió remota per ssh.

comanda scp - secure copy
usage: scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
            [-J destination] [-l limit] [-o ssh_option] [-P port]
            [-S program] source ... target

Per tant podem enviar fitxers locals al servidor remot de la següent forma:

scp fitxer_a_copiar usuari@host:path_on_volem_copiar

per exemple

scp fitxer.tar.gz isard@ipdelservidr:/home/isard/

Accés SSH amb clau privada

Per poder iniciar sessió amb una màquina remota a través de SSH, podem evitar haver d'introduir el password cada vegada que volem iniciar-hi sessió amb un usuari determinat.

Per això utilitzarem l'autenticació amb clau pública. Aquesta funciona amb dues claus: una de pública i una altra de privada. Per entendre el funcionament se sol recórrer a la metàfora del cadenat i la clau. La clau pública funciona com un cadenat i la privada com la clau. El cadenat es col·locarà al servidor remot al qual es vol accedir; quan s'intenta accedir-hi es comprovarà que la màquina que intenta connectar té la clau, la clau privada.

Per configurar l'accés SSH amb clau pública cal:

  • Generar el parell de claus pública/privada.

  • Copiar la clau pública al servidor.

  • Deshabilitar l'accés al servidor amb contrasenya (o no)

Com generar el parell de claus pública/privada

Per generar les claus es pot fer servir la comanda ssh-keygen a la màquina local des de la qual es vol connectar amb el servidor:

ssh-keygen -b 4096

ssh-keygen demana la ruta i el nom del fitxer que allotjarà les claus pública i privada. Es pot desar on es vulgui, però la carpeta ha de tenir permisos 700 i el fitxer amb la clau privada 600. En cas contrari, la connexió no s'establirà. La clau privada es pot protegir alhora amb una contrasenya. D'aquesta manera, si cau en mans no desitjades, ho tindrà una mica més difícil per fer-la servir.

En Windows també funciona.

Exemple de l'execució de la comanda ssh-keygen amb tots els valors per defecte.

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\usuari/.ssh/id_rsa):
Created directory 'C:\Users\usuari/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\usuari/.ssh/id_rsa.
Your public key has been saved in C:\Users\usuari/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3AxygVuwYgXI4mT/dSqEuBQXPfPuQaQIq58OjghIXdE usuari@usuari-PC
The key's randomart image is:
+---[RSA 3072]----+
| . o+o+o.        |
|.=o. =oE..       |
|+.B =.Ooo        |
| =.=.+.B =       |
|o...o + S o      |
|+.   o +         |
|+. .  o .        |
|=.o    .         |
|oo.              |
+----[SHA256]-----+

ssh-keygen generarà dos fitxers:

  • id_rsa és la clau privada, la que romandrà a la màquina local.
  • id_rsa.pub és la clau pública, la qual s'ha de copiar al servidor remot al qual voleu accedir.

Copiar la clau pública al servidor

Un cop generat el parell de claus a la màquina local cal copiar la clau pública al servidor remot. Això ho farem amb la comanda scp:

scp %HOMEPATH%\.ssh\id_rsa.pub usuari@hostRemot:clau_nova.pub
scp $Env:HOMEPATH\.ssh\id_rsa.pub usuari@hostRemot:clau_nova.pub
scp $HOME\.ssh\id_rsa.pub usuari@hostRemot:clau_nova.pub

Per executar aquesta comanda scp ens demanarà usuari i password.

Aquesta clau pública s'ha d'incloure a l'arxiu /home/user/.ssh/authorized_keys. Si la carpeta .ssh no existeix, la creem abans de copiar. El fitxer authorized_keys pot ser que ja existeixi, hem de tenir present de no eliminar-lo ni recrear-lo de nou perdent les altres possibles claus que tingui incloses:

Per tant, ens connectarem per ssh al host remot i farem el procés necessari per tenir el contingut del fitxer que hi hem copiat clau_nova.pub dins el fitxer .ssh/authorized_keys.

Aquesta primera connexió, sí que ens demanarà usuari i password.

Connectem al servidor
ssh usuari@hostRemot
Executem des del servidor
ls .ssh || (mkdir .ssh && chmod 700 .ssh && ls .ssh && echo "Directori .ssh creat")
cat clau_nova.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
rm clau_nova.pub

A partir d'ara, quan ens connectem des d'aquest ordinador on hem generat les dues claus, no se'ns demanarà password.

Accés amb la clau pública

Per connectar-vos al servidor amb clau pública en comptes de contrasenya:

ssh usuari@hostRemot

Podem especificar la clau privada a utilitzar amb l'opció -i:

ssh -i id_rsa usuari@hostRemot

Així, doncs, podem tenir diferents claus privades per a diferents màquines si compartim la màquina amb altres companys.

Podem deshabilitar l'accés al servidor amb contrasenya

Per no permetre l'accés al servidor amb contrasenya, podem deshabilitar-ne l'accés. Per això clardrà modificar el fitxer de configuració del servei SSH que trobem, normalment, a /etc/ssh/sshd_config.

CAl trobar la línia amb el paràmeter PasswordAuthentication i posar-li no. Si no tenim aquest paràmetre, cal afegir-hi la línia completa.

PasswordAuthentication no

També podem habilitar només alguns usuaris per accedir amb la línia següent:

AllowUsers ubuntu isard professorat

Compte, un nom mal escrit i potser no podrem connectar-hi més.

I ara només ens cal reiniciar el servei

systemctl restart sshd

Compte, a l'executar la comanda sudo sí ens demanarà el password