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>
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.
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.
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.
ssh usuari@hostRemot
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