Consigli pratici, esempi e tunnel SSH

Consigli pratici, esempi e tunnel SSH
Esempi pratici SSH, che porterà le tue capacità di amministratore di sistema remoto a un nuovo livello. Comandi e suggerimenti aiuteranno non solo a usare SSH, ma anche navigare nella rete in modo più competente.

Conoscere alcuni trucchi ssh utile a qualsiasi amministratore di sistema, ingegnere di rete o specialista della sicurezza.

Esempi pratici di SSH

  1. Proxy calzini SSH
  2. Tunnel SSH (port forwarding)
  3. Tunnel SSH al terzo host
  4. Tunnel SSH inverso
  5. Proxy inverso SSH
  6. Installazione di VPN su SSH
  7. Copia di una chiave SSH (ssh-copy-id)
  8. Esecuzione di comandi da remoto (non interattiva)
  9. Acquisizione e visualizzazione remota di pacchetti in Wireshark
  10. Copia di una cartella locale su un server remoto tramite SSH
  11. Applicazioni GUI remote con inoltro SSH X11
  12. Copia remota di file tramite rsync e SSH
  13. SSH sulla rete Tor
  14. SSH all'istanza EC2
  15. Modifica di file di testo utilizzando VIM tramite ssh/scp
  16. Montare SSH remoto come cartella locale con SSHFS
  17. Multiplexing SSH con ControlPath
  18. Streaming video su SSH utilizzando VLC e SFTP
  19. Autenticazione a due fattori
  20. Saltare gli host con SSH e -J
  21. Blocco dei tentativi di forza bruta SSH utilizzando iptables
  22. SSH Escape per modificare il port forwarding

Nozioni di base prima

Analisi della riga di comando SSH

L'esempio seguente utilizza parametri comuni spesso riscontrati durante la connessione a un server remoto SSH.

localhost:~$ ssh -v -p 22 -C neo@remoteserver

  • -v: L'output di debug è particolarmente utile quando si analizzano i problemi di autenticazione. Può essere utilizzato più volte per visualizzare informazioni aggiuntive.
  • - p 22: porta di connessione a un server SSH remoto. Non è necessario specificare 22, perché questo è il valore predefinito, ma se il protocollo è su un'altra porta, lo specifichiamo utilizzando il parametro -p. La porta di ascolto è specificata nel file sshd_config nel formato Port 2222.
  • -C: Compressione per la connessione. Se hai una connessione lenta o visualizzi molto testo, questo può velocizzare la connessione.
  • neo@: La riga prima del simbolo @ indica il nome utente per l'autenticazione sul server remoto. Se non lo specifichi, verrà utilizzato per impostazione predefinita il nome utente dell'account a cui hai effettuato l'accesso (~$whoami). L'utente può anche essere specificato utilizzando il parametro -l.
  • remoteserver: nome dell'host a cui connettersi ssh, può trattarsi di un nome di dominio completo, un indirizzo IP o qualsiasi host nel file degli host locali. Per connetterti a un host che supporta sia IPv4 che IPv6, puoi aggiungere il parametro alla riga di comando -4 o -6 per una corretta risoluzione.

Tutti i parametri sopra indicati sono facoltativi tranne remoteserver.

Utilizzando il file di configurazione

Sebbene molti abbiano familiarità con il file sshd_config, esiste anche un file di configurazione del client per il comando ssh. Valore di default ~/.ssh/config, ma può essere definito come parametro per un'opzione -F.

Host *
     Port 2222

Host remoteserver
     HostName remoteserver.thematrix.io
     User neo
     Port 2112
     IdentityFile /home/test/.ssh/remoteserver.private_key

Ci sono due voci host nel file di configurazione ssh di esempio sopra. Il primo indica tutti gli host, tutti utilizzando il parametro di configurazione della porta 2222. Il secondo lo dice per l'host Server remoto è necessario utilizzare un nome utente, una porta, un FQDN e un IdentityFile diversi.

Un file di configurazione può far risparmiare molto tempo di digitazione consentendo l'applicazione automatica della configurazione avanzata durante la connessione a host specifici.

Copia di file su SSH utilizzando SCP

Il client SSH viene fornito con altri due strumenti molto utili per copiare i file connessione ssh crittografata. Vedi sotto per un esempio di utilizzo standard dei comandi scp e sftp. Tieni presente che molte delle opzioni ssh si applicano anche a questi comandi.

localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png

In questo esempio il file mypic.png copiato in Server remoto nella cartella /media/dati e rinominato in mypic_2.png.

Non dimenticare la differenza nel parametro port. È qui che molte persone rimangono intrappolate quando lanciano scp dalla riga di comando. Ecco il parametro della porta -PE non -p, proprio come in un client ssh! Dimenticherai, ma non preoccuparti, tutti dimenticano.

Per chi ha familiarità con la console ftp, molti comandi sono simili in sftp... Tu puoi fare spingere, metti и lscome il cuore desidera.

sftp neo@remoteserver

Esempi pratici

In molti di questi esempi, i risultati possono essere ottenuti utilizzando metodi diversi. Come in tutti i nostri libri di testo ed esempi, si privilegiano gli esempi pratici che semplicemente svolgono il loro compito.

1. Proxy calzini SSH

La funzionalità proxy SSH è la numero 1 per una buona ragione. È più potente di quanto molti credano e ti dà accesso a qualsiasi sistema a cui ha accesso il server remoto, utilizzando praticamente qualsiasi applicazione. Un client ssh può tunnelare il traffico attraverso un proxy SOCKS con un semplice comando. È importante comprendere che il traffico verso i sistemi remoti proverrà da un server remoto, questo verrà indicato nei log del server web.

localhost:~$ ssh -D 8888 user@remoteserver

localhost:~$ netstat -pan | grep 8888
tcp        0      0 127.0.0.1:8888       0.0.0.0:*               LISTEN      23880/ssh

Qui eseguiamo un proxy calzini sulla porta TCP 8888, il secondo comando controlla che la porta sia attiva in modalità di ascolto. 127.0.0.1 indica che il servizio viene eseguito solo su localhost. Possiamo usare un comando leggermente diverso per ascoltare su tutte le interfacce, incluse Ethernet o Wi-Fi, questo consentirà ad altre applicazioni (browser, ecc.) sulla nostra rete di connettersi al servizio proxy tramite il proxy calzini ssh.

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

Ora possiamo configurare il browser per connettersi al proxy calzini. In Firefox, seleziona Impostazioni | Base | Impostazioni di rete. Specificare l'indirizzo IP e la porta a cui connettersi.

Consigli pratici, esempi e tunnel SSH

Tieni presente l'opzione in fondo al modulo per far sì che anche le richieste DNS del tuo browser passino attraverso un proxy SOCKS. Se stai utilizzando un server proxy per crittografare il traffico web sulla tua rete locale, probabilmente vorrai selezionare questa opzione in modo che le richieste DNS vengano incanalate attraverso la connessione SSH.

Attivazione del proxy calzini in Chrome

L'avvio di Chrome con determinati parametri della riga di comando abiliterà il proxy calzini, oltre al tunneling delle richieste DNS dal browser. Fidati ma controlla. Utilizzo tcpdump per verificare che le query DNS non siano più visibili.

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

Utilizzo di altre applicazioni con un proxy

Tieni presente che anche molte altre applicazioni possono utilizzare proxy calzini. Il browser web è semplicemente il più popolare di tutti. Alcune applicazioni dispongono di opzioni di configurazione per abilitare un server proxy. Altri hanno bisogno di un piccolo aiuto con un programma di supporto. Per esempio, proxychain ti consente di eseguire un proxy calzini Microsoft RDP, ecc.

localhost:~$ proxychains rdesktop $RemoteWindowsServer

I parametri di configurazione del proxy SOCKS sono impostati nel file di configurazione proxychains.

Suggerimento: se usi il desktop remoto da Linux su Windows? Prova il cliente FreeRDP. Questa è un'implementazione più moderna di rdesktop, con un'esperienza molto più fluida.

Opzione per utilizzare SSH tramite proxy calzini

Sei seduto in un bar o in un hotel e sei costretto a utilizzare un WiFi piuttosto inaffidabile. Lanciamo un proxy ssh localmente da un laptop e installiamo un tunnel ssh nella rete domestica su un Rasberry Pi locale. Utilizzando un browser o altre applicazioni configurate per un proxy calzini, possiamo accedere a qualsiasi servizio di rete sulla nostra rete domestica o accedere a Internet tramite la nostra connessione domestica. Tutto ciò che si trova tra il tuo laptop e il tuo server di casa (tramite Wi-Fi e Internet a casa tua) è crittografato in un tunnel SSH.

2. Tunnel SSH (port forwarding)

Nella sua forma più semplice, un tunnel SSH apre semplicemente una porta sul tuo sistema locale che si connette a un'altra porta all'altra estremità del tunnel.

localhost:~$ ssh  -L 9999:127.0.0.1:80 user@remoteserver

Diamo un'occhiata al parametro -L. Può essere pensato come il lato locale dell’ascolto. Quindi nell'esempio sopra, la porta 9999 è in ascolto sul lato host locale e inoltrata tramite la porta 80 al server remoto. Tieni presente che 127.0.0.1 si riferisce a localhost sul server remoto!

Saliamo il gradino. L'esempio seguente comunica le porte in ascolto con altri host sulla rete locale.

localhost:~$ ssh  -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

In questi esempi ci stiamo connettendo a una porta del server web, ma potrebbe trattarsi di un server proxy o di qualsiasi altro servizio TCP.

3. Tunnel SSH verso un host di terze parti

Possiamo utilizzare gli stessi parametri per connettere un tunnel da un server remoto a un altro servizio in esecuzione su un terzo sistema.

localhost:~$ ssh  -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver

In questo esempio, stiamo reindirizzando un tunnel da remoteserver a un server web in esecuzione su 10.10.10.10. Traffico dal server remoto al 10.10.10.10 non più nel tunnel SSH. Il server web su 10.10.10.10 considererà remoteserver come fonte delle richieste web.

4. Tunnel SSH inverso

Qui configureremo una porta di ascolto sul server remoto che si ricollegherà alla porta locale sul nostro localhost (o altro sistema).

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

Questa sessione SSH stabilisce una connessione dalla porta 1999 sul server remoto alla porta 902 sul nostro client locale.

5. Proxy inverso SSH

In questo caso, stiamo configurando un proxy calzini sulla nostra connessione ssh, ma il proxy è in ascolto sull'estremità remota del server. Le connessioni a questo proxy remoto ora appaiono dal tunnel come traffico proveniente dal nostro localhost.

localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver

Risoluzione dei problemi con i tunnel SSH remoti

Se riscontri problemi con il funzionamento delle opzioni SSH remote, contatta netstat, a quali altre interfacce è connessa la porta di ascolto. Sebbene negli esempi abbiamo indicato 0.0.0.0, ma se il valore Porte gateway в sshd_config impostato no, l'ascoltatore sarà associato solo a localhost (127.0.0.1).

Avviso di sicurezza

Tieni presente che aprendo tunnel e calzini proxy, le risorse di rete interne potrebbero essere accessibili a reti non affidabili (come Internet!). Questo può rappresentare un serio rischio per la sicurezza, quindi assicurati di capire chi è l'ascoltatore e a cosa ha accesso.

6. Installazione della VPN tramite SSH

Un termine comune tra gli specialisti in metodi di attacco (pentesters, ecc.) è “fulcro della rete”. Una volta stabilita una connessione su un sistema, quel sistema diventa il gateway per l'ulteriore accesso alla rete. Un fulcro che permette di muoversi in ampiezza.

Per tale punto d'appoggio possiamo utilizzare un proxy SSH e proxychain, tuttavia esistono alcune limitazioni. Ad esempio non sarà possibile lavorare direttamente con i socket, quindi non potremo scansionare le porte all'interno della rete tramite Nmap SYN.

Utilizzando questa opzione VPN più avanzata, la connessione è ridotta a livello 3. Possiamo quindi semplicemente instradare il traffico attraverso il tunnel utilizzando il routing di rete standard.

Il metodo utilizza ssh, iptables, tun interfaces e instradamento.

Per prima cosa devi impostare questi parametri sshd_config. Poiché stiamo apportando modifiche alle interfacce sia del sistema remoto che di quello client, noi hanno bisogno dei diritti di root su entrambi i lati.

PermitRootLogin yes
PermitTunnel yes

Successivamente stabiliremo una connessione ssh utilizzando il parametro che richiede l'inizializzazione dei dispositivi tun.

localhost:~# ssh -v -w any root@remoteserver

Ora dovremmo avere un dispositivo tun quando mostriamo le interfacce (# ip a). Il passaggio successivo aggiungerà gli indirizzi IP alle interfacce del tunnel.

Lato client SSH:

localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up

Lato server SSH:

remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up

Ora abbiamo un percorso diretto verso un altro host (route -n и ping 10.10.10.10).

Puoi instradare qualsiasi sottorete attraverso un host sull'altro lato.

localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0

Sul lato remoto è necessario abilitare ip_forward и iptables.

remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADE

Boom! VPN su tunnel SSH al livello di rete 3. Questa è una vittoria.

In caso di problemi, utilizzare tcpdump и pingper determinare la causa. Dato che stiamo giocando al livello 3, i nostri pacchetti icmp passeranno attraverso questo tunnel.

7. Copia la chiave SSH (ssh-copy-id)

Esistono diversi modi per farlo, ma questo comando consente di risparmiare tempo evitando di copiare i file manualmente. Copia semplicemente ~/.ssh/id_rsa.pub (o la chiave predefinita) dal tuo sistema a ~/.ssh/authorized_keys su un server remoto.

localhost:~$ ssh-copy-id user@remoteserver

8. Esecuzione di comandi remoti (non interattivi)

squadra ssh Può essere collegato ad altri comandi per un'interfaccia comune e intuitiva. Aggiungi semplicemente il comando che desideri eseguire sull'host remoto come ultimo parametro tra virgolette.

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

In questo esempio grep eseguito sul sistema locale dopo che il registro è stato scaricato tramite il canale ssh. Se il file è di grandi dimensioni, è più comodo eseguirlo grep sul lato remoto semplicemente racchiudendo entrambi i comandi tra virgolette doppie.

Un altro esempio svolge la stessa funzione di ssh-copy-id dall'esempio 7.

localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'

9. Acquisizione e visualizzazione di pacchetti remoti in Wireshark

Ne ho preso uno dei nostri esempi di tcpdump. Usalo per acquisire pacchetti in remoto e visualizzare i risultati direttamente nella GUI Wireshark locale.

:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

10. Copia di una cartella locale su un server remoto tramite SSH

Un bel trucco che comprime una cartella utilizzando bzip2 (questa è l'opzione -j nel comando tar), quindi recupera il flusso bzip2 dall'altro, creando una cartella duplicata sul server remoto.

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

11. Applicazioni GUI remote con inoltro SSH X11

Se X è installato sul client e sul server remoto, puoi eseguire in remoto un comando della GUI con una finestra sul desktop locale. Questa funzione esiste da molto tempo, ma è ancora molto utile. Avvia un browser Web remoto o anche la console VMWawre Workstation come faccio in questo esempio.

localhost:~$ ssh -X remoteserver vmware

Stringa richiesta X11Forwarding yes in archivio sshd_config.

12. Copia remota di file utilizzando rsync e SSH

rsync molto più conveniente scp, se sono necessari backup periodici di una directory, di un numero elevato di file o di file molto grandi. Esiste una funzione per il ripristino da un errore di trasferimento e la copia solo dei file modificati, che consente di risparmiare traffico e tempo.

Questo esempio utilizza la compressione gzip (-z) e la modalità di archiviazione (-a), che consente la copia ricorsiva.

:~$ rsync -az /home/testuser/data remoteserver:backup/

13. SSH sulla rete Tor

La rete Tor anonima può eseguire il tunneling del traffico SSH utilizzando il comando torsocks. Il seguente comando passerà il proxy ssh attraverso Tor.

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Tronchi utilizzerà la porta 9050 su localhost per il proxy. Come sempre, quando usi Tor devi controllare seriamente quale traffico viene incanalato e altri problemi di sicurezza operativa (opsec). Dove vanno le tue query DNS?

14. Istanza da SSH a EC2

Per connetterti a un'istanza EC2, hai bisogno di una chiave privata. Scaricalo (estensione .pem) dal pannello di controllo di Amazon EC2 e modifica le autorizzazioni (chmod 400 my-ec2-ssh-key.pem). Conserva la chiave in un luogo sicuro o inseriscila nella tua cartella ~/.ssh/.

localhost:~$ ssh -i ~/.ssh/my-ec2-key.pem ubuntu@my-ec2-public

Parametro -i dice semplicemente al client ssh di utilizzare questa chiave. File ~/.ssh/config Ideale per configurare automaticamente l'utilizzo delle chiavi durante la connessione a un host ec2.

Host my-ec2-public
   Hostname ec2???.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/.ssh/my-ec2-key.pem

15. Modifica di file di testo utilizzando VIM tramite ssh/scp

Per tutti gli innamorati vim Questo suggerimento ti farà risparmiare tempo. Usando vim i file vengono modificati tramite scp con un comando. Questo metodo crea semplicemente il file localmente in /tmpe poi lo copia di nuovo una volta salvato da vim.

localhost:~$ vim scp://user@remoteserver//etc/hosts

Nota: il formato è leggermente diverso dal solito scp. Dopo l'ospite abbiamo il doppio //. Questo è un riferimento al percorso assoluto. Una barra indicherà un percorso relativo alla tua cartella home users.

**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])

Se vedi questo errore, ricontrolla il formato del comando. Questo di solito significa un errore di sintassi.

16. Montaggio di un SSH remoto come cartella locale con SSHFS

Per mezzo di sshfs -client del file system ssh - possiamo connettere una directory locale a una posizione remota con tutte le interazioni con i file in una sessione crittografata ssh.

localhost:~$ apt install sshfs

Installa il pacchetto su Ubuntu e Debian sshfs, quindi monta semplicemente la posizione remota sul nostro sistema.

localhost:~$ sshfs user@remoteserver:/media/data ~/data/

17. Multiplexing SSH con ControlPath

Per impostazione predefinita, se esiste una connessione esistente a un server remoto utilizzando ssh seconda connessione utilizzando ssh o scp stabilisce una nuova sessione con autenticazione aggiuntiva. Opzione ControlPath consente di utilizzare la sessione esistente per tutte le connessioni successive. Ciò accelererà notevolmente il processo: l'effetto è evidente anche su una rete locale, e ancora di più quando ci si connette a risorse remote.

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath specifica il socket per verificare la presenza di nuove connessioni per vedere se è presente una sessione attiva ssh. L'ultima opzione significa che anche dopo essere usciti dalla console, la sessione esistente rimarrà aperta per 10 minuti, quindi durante questo tempo sarà possibile riconnettersi al socket esistente. Per ulteriori informazioni, vedere la guida. ssh_config man.

18. Streaming video su SSH utilizzando VLC e SFTP

Anche gli utenti di lunga data ssh и vlc (Video Lan Client) non sempre sono a conoscenza di questa comoda opzione quando hai davvero bisogno di guardare un video in rete. Nelle impostazioni File | Apri Streaming di rete programma vlc puoi inserire la posizione come sftp://. Se è richiesta una password, verrà visualizzato un messaggio.

sftp://remoteserver//media/uploads/myvideo.mkv

19. Autenticazione a due fattori

Al servizio SSH si applica la stessa autenticazione a due fattori del tuo conto bancario o dell'account Google.

Ovviamente, ssh inizialmente ha una funzione di autenticazione a due fattori, ovvero una password e una chiave SSH. Il vantaggio di un token hardware o dell'app Google Authenticator è che di solito si tratta di un dispositivo fisico diverso.

Consulta la nostra guida di 8 minuti per utilizzando Google Authenticator e SSH.

20. Saltare gli host con ssh e -J

Se la segmentazione della rete significa che devi passare attraverso più host ssh per raggiungere la rete di destinazione finale, la scorciatoia -J ti farà risparmiare tempo.

localhost:~$ ssh -J host1,host2,host3 [email protected]

La cosa principale da capire qui è che questo non è la stessa cosa del comando ssh host1, lo giuro user@host1:~$ ssh host2 ecc. L'opzione -J utilizza abilmente l'inoltro per forzare localhost a stabilire una sessione con l'host successivo nella catena. Quindi nell'esempio sopra, il nostro localhost è autenticato su host4. Cioè, vengono utilizzate le nostre chiavi localhost e la sessione da localhost a host4 è completamente crittografata.

Per una tale possibilità in ssh_config specificare l'opzione di configurazione Proxy Jump. Se devi passare regolarmente attraverso diversi host, l'automazione tramite la configurazione ti farà risparmiare molto tempo.

21. Blocca i tentativi di forza bruta SSH utilizzando iptables

Chiunque abbia gestito un servizio SSH e abbia guardato i log conosce il numero di tentativi di forza bruta che si verificano ogni ora di ogni giorno. Un modo rapido per ridurre il rumore nei log è spostare SSH su una porta non standard. Apportare modifiche al file sshd_config tramite parametro di configurazione Porta##.

Con iptables Puoi anche bloccare facilmente i tentativi di connessione a una porta al raggiungimento di una determinata soglia. Un modo semplice per farlo è usare OSSEC, perché non solo blocca SSH, ma esegue una serie di altre misure di rilevamento delle intrusioni basate sul nome host (HIDS).

22. SSH Escape per modificare il port forwarding

E il nostro ultimo esempio ssh progettato per modificare al volo il port forwarding all'interno di una sessione esistente ssh. Immagina questo scenario. Sei nel profondo della rete; forse ho saltato più di una mezza dozzina di host e ho bisogno di una porta locale sulla workstation che venga inoltrata al Microsoft SMB di un vecchio sistema Windows 2003 (qualcuno ricorda ms08-67?).

Cliccando enter, prova ad accedere alla console ~C. Si tratta di una sequenza di controllo della sessione che consente di apportare modifiche a una connessione esistente.

localhost:~$ ~C
ssh> -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward
ssh> -L 1445:remote-win2k3:445
Forwarding port.

Qui puoi vedere che abbiamo inoltrato la nostra porta locale 1445 a un host Windows 2003 che abbiamo trovato sulla rete interna. Adesso corri e basta msfconsolee puoi andare avanti (supponendo che tu preveda di utilizzare questo host).

Completamento

Questi esempi, suggerimenti e comandi ssh dovrebbe fornire un punto di partenza; Maggiori informazioni su ciascuno dei comandi e delle funzionalità sono disponibili nelle pagine man (man ssh, man ssh_config, man sshd_config).

Sono sempre stato affascinato dalla possibilità di accedere ai sistemi ed eseguire comandi ovunque nel mondo. Sviluppando le tue abilità con strumenti come ssh diventerai più efficace in ogni gioco a cui giochi.

Fonte: habr.com

Aggiungi un commento