SSH cosa e come

Molti sviluppatori web utilizzano SSH ("Secure Shell") su base giornaliera per gestire i propri server, eseguire il backup dei file, lavorare in remoto e una miriade di altri compiti. Oggi spiegherò cos'è SSH, eseguirò una breve revisione della storia e, infine, ti insegnerò come configurarlo sul tuo server remoto o anche sulla tua rete locale. Iniziamo!


Una spiegazione iniziale

Se stai leggendo questo, è probabile che tu abbia almeno una certa conoscenza di Terminal (o di Windows, qualcosa come Cygwin). Se è così, capirai questa rapida spiegazione funzionale di SSH.

SSH utilizza essenzialmente una connessione di rete per accedere a Terminal su un altro computer.

Se non hai familiarità con Terminal, ci sono molte spiegazioni e guide per principianti al Terminal, sia qui su Netsuts + che altrove. Il potere di SSH dipende dalla sua semplicità; offrendoti l'accesso al Terminale di un'altra macchina, SSH punta all'inseguimento e ti dà il controllo completo su una macchina remota. Se comprendi la potenza di Terminal e la sua connessione diretta con il funzionamento interno della tua macchina locale, allora comprendi la potenza di SSH!


Una breve storia

SSH è stato sviluppato nel suo stato infantile nel 1995. Lo sviluppatore principale, Tatu Ylonen, lo ha sviluppato come il primo modo sicuro per amministrare un sistema UNIX remoto. Precedentemente a SSH, gli unici strumenti esistenti trasmettevano informazioni come password in chiaro.


Quindi, come posso usarlo?

Ci sono un milione di guide là fuori su come impostare con SSH. Copriremo in modo specifico un metodo oggi. Per prima cosa, ti consigliamo di assicurarti di avere SSH sul tuo sistema.

  • Mac - Una versione di OpenSSH viene preinstallata.
  • finestre - Segui una guida come questa o questa per ottenere Cygwin e il pacchetto "openssh" installato.
  • Linux - È probabile che OpenSSH sia già installato, ma se non lo è, puoi seguire la stessa guida per installarlo.

Per determinare se SSH è installato, eseguire 'quale ssh'. Se Terminal restituisce qualcosa sulla falsariga di / Usr / bin / ssh, allora sei a posto! Altrimenti, seguire una di queste guide per installarlo.

In questo articolo, assumerò che la versione che stai usando sia OpenSSH; ci sono alcune differenze di configurazione che dipendono dalla tua versione di SSH. Spiegheremo come configurare un Mac per connettersi a un server MediaTemple attraverso un singolo comando SSH. Una volta installato SSH sul computer, è necessario assicurarsi che l'host di destinazione abbia abilitato SSH. SSH viene eseguito sulla porta 22 per impostazione predefinita; puoi usare uno strumento da riga di comando come Nmap per eseguire il ping del server per determinare se la porta 22 accetta le connessioni in entrata, in questo modo:

 sudo nmap -sS hostname.com

Naturalmente, probabilmente hai accesso all'interfaccia amministrativa per il server. Assicurati di guardare attraverso le opzioni e abilitare SSH. Su un server Mediatemple, questa configurazione si trova sotto il pannello Controllo server. Mediatemple SSH è accessibile usando [email protected]. Puoi aggiungere utenti all'account, ma per mantenere le cose semplici, useremo [email protected].

Una volta abilitato SSH (e hai impostato una password di root nell'amministratore del server), puoi eseguire la seguente riga su SSH sul tuo server.

 ssh [email protected]

... dove primarydomain.com è il tuo dominio principale MediaTemple. Ti verrà quindi richiesta la tua password (che è la password di root che hai impostato nel pannello di controllo). Se non si utilizza MediaTemple, è possibile anche SSH direttamente all'indirizzo IP del server.

Se si utilizza l'hosting condiviso, è probabile che non si effettui il login come root. Invece, effettuerai l'accesso con il nome di un account utente. Ad esempio, se si utilizza un servizio come Site5, è possibile accedere con un nome utente in un sottodominio, come questo:

 ssh [email protected]

In definitiva, queste configurazioni dipenderanno dalla tua specifica società di server web. Fare riferimento alla documentazione dell'host per ulteriori informazioni.

Una volta eseguito il "bombardamento", è possibile eseguire comandi e attraversare il file system all'interno di Terminal. A seconda del tuo livello di accesso, potresti essere in grado di installare cose sul tuo server usando i comandi apt-get o wget. Puoi gestire il tuo server Apache, modificare i file di configurazione con un editor di testo basato sul terminale, visualizzare i log degli errori, cancellare le cache, visualizzare i file direttamente su un server per assicurarti che siano la versione corretta e molte altre attività di amministrazione del sistema di livello inferiore . Ora, cosa succederebbe se volessi farlo Più veloce con SSH?


Come posso usarlo ... Meglio?

Ci sono un sacco di cose potenti che SSH ti apre. Salteremo alcuni di essi (poiché alcuni sono più correlati a sysadmin, come il tunneling). Ma faremo qualche trucco utile.

Log-in super veloce

Stai pensando a te stesso, "sembra che ci dovrebbe essere un modo più veloce per farlo." Hai ragione. E c'è. Invece di dover ricordare il tuo dominio, password e nome utente per ogni server, puoi configurare alcune configurazioni che ti permetteranno di accelerare il processo verso qualcosa lungo queste linee.

 ssh myserver

Con la configurazione corretta, puoi eseguire questa operazione e senza dover immettere password, indirizzi IP o nomi di dominio lunghi, sei arrivato! Di nuovo, assumeremo che tu stia effettuando l'accesso a un server MediaTemple. In primo luogo, genereremo chiavi ssh. Questo è fondamentalmente un insieme di chiavi criptate che vivono ~ / .Ssh sul tuo computer locale. Hai una chiave "pubblica" e una chiave "privata". Quindi, per prima cosa, apri una nuova finestra di Terminale e crea la cartella .ssh nella tua home directory.

 mkdir ~ / .ssh

Successivamente genererai le tue chiavi con la seguente riga. (Questo proviene direttamente dalla documentazione di MediaTemple.)

 ssh-keygen -t rsa -b 2048 -f ~ / .ssh / id_rsa -C "I commenti sulla tua chiave vanno qui."

Questa linea genererà una chiave ssh di tipo rsa, con 2048 bit (per sicurezza), nel percorso file specificato, con il commento specificato. Ti verrà promessa una password, ma non è obbligatoria o necessaria; non fornire una password ti consentirà di accedere automaticamente. Il tipo RSA è per la versione 1 del protocollo SSH. Digitare DSA per la versione del protocollo 2. Verificare con il server Web quale versione stanno utilizzando. Una volta generate le chiavi, la eseguirai per assicurarti che le tue configurazioni SSH siano impostate sulle giuste autorizzazioni.

 chmod 700 ~ / .ssh && chmod 600 ~ / .ssh / *

Successivamente, caricherete la vostra chiave pubblica sul vostro server. Ci sono diversi modi per farlo; questo modo viene anche dai documenti di MediaTemple.

 cat ~ / .ssh / id_rsa.pub | ssh [email protected] 'cat - >> ~ / .ssh / authorized_keys'

Questo codice fa eco a id_rsa.pub tramite un '|' (pipe) nel comando successivo, che è un SSH in [email protected], dove si eseguirà un eco e una concatenazione di ciò che è stato collegato al primo comando. Sembra un po 'complicato, quindi ci sono alcuni modi alternativi per gestirlo. In sostanza, non vorrai interruzioni di linea e la tua chiave pubblica sulla propria linea in un file, chiamato authorized_keys sul tuo server nella directory ~ / .ssh /. Quindi, se questa è la prima o l'unica chiave che vuoi sul tuo server, puoi eseguire questo comando per copiarlo direttamente in quella posizione.

 scp ~ / .ssh / id_rsa.pub [email protected]: .ssh / authorized_keys

Questa linea sta essenzialmente dicendo "copia questo primo file tramite SSH al server in questa posizione rispetto alla mia attuale home directory".

Una volta che il tuo authorized_keys contiene la tua chiave pubblica, puoi provare ad accedere al server con ssh [email protected]. Se inserisci la tua chiave pubblica nei file di configurazione SSH della directory utente root, sarai in grado di accedere direttamente a root. Ti verrà chiesto di un'impronta digitale rsa; andare avanti e consentire questa azione. Aggiunge il server al quale ci si connette a un file known_hosts. Questo file può essere utilizzato per molte cose diverse, ma in particolare per proteggersi da ciò che viene definito un attacco "man-in-the-middle". Se vuoi leggere un po 'di più su questo, controlla questa spiegazione.

Se riesci ad accedere al tuo server, come se avessi inserito una password, le tue chiavi funzioneranno correttamente. Il passaggio successivo consiste nell'aggiungere un paio di linee per un collegamento a un file di configurazione sulla macchina. Apri ~ / .ssh / config nel tuo editor di testo preferito (crealo se non esiste) e aggiungi quanto segue:

 Nome host host Nomehost nomehost di utente di hostname

Dove "shortname" è un nickname per il server a cui si desidera accedere. Ad esempio, "Host myserver" mi permetterebbe di fare ssh myserver. HostName è la posizione del server e, naturalmente, l'utente è il tuo nome utente. Tu forse hai Utente root in questo punto. Una volta salvato questo file, dovresti essere in grado di eseguire un semplice comando per accedere al tuo server, in questo modo:

 ssh shortname

Git senza un hub

Nota: questa sezione richiede un po 'di familiarità con Git.

Puoi usare SSH per configurare i tuoi repository Git sul tuo server! Questo è utile per le aziende che non vogliono esporre il loro codice su GitHub per qualsiasi motivo, ed è fantastico poter inviare direttamente da un computer locale a un repository Git sul proprio server.

Per configurarlo, assicurati che Git sia installato sia sull'host che sul computer locale. Potrebbe essere necessario passare attraverso la società del server Web per installare Git. Quindi, corri git init sul server nella posizione in cui si desidera che il repository Git sia. Naturalmente, puoi farlo in centinaia di modi diversi, ma se preferisci non avere un repository spoglio, puoi utilizzare le filiali da cui attingere dal tuo computer locale. Ecco un flusso di lavoro comune.

 ssh [email protected] cd / path / to / repo git init git checkout -b staging git checkout master # disconnettersi dalla sessione shell usando ctrl-d cd / local / repo git init git add. git commit -am "qualche messaggio" git remote aggiungi origine [email protected]: / percorso / a / repo git checkout -b staging git push origine staging ssh [email protected] cd / percorso / su / repo git merge staging

In sostanza, ciò che sta accadendo qui è che si sta effettuando l'accesso al server, passando al percorso del repository desiderato, creando un repository e aggiungendo un ramo "staging" che è possibile trasferire dal proprio computer locale. Quindi, si sta creando il repository locale e un corrispondente ramo di "staging" sul computer locale e si aggiungono file per tracciare il repository. Poi arriva un commit iniziale. Si sta quindi aggiungendo il repository remoto come alias di "origine". Successivamente, si sta spingendo il ramo di gestione temporanea locale al ramo di gestione temporanea dell'alias "origine". Finalmente, sei di nuovo sul server e unisci il ramo "staging" con il ramo "master" predefinito.

SFTP> FTP

È anche possibile utilizzare FTP con protocollo SSH (protocollo di trasferimento file), che è essenzialmente una versione più sicura (crittografata) di FTP che viene eseguita tramite la porta 22 (anziché la porta FTP predefinita 21). La maggior parte dei client FTP supporta anche SFTP. FileZilla (per Windows) e Fetch (per Mac) sono due popolari (e gratuiti) client SFTP / FTP.

Facile accesso al tuo server quasi ovunque

Finché sei vicino a un computer connesso a Internet, ha un terminale e ha installato SSH (qualsiasi Mac connesso al WiFi, ad esempio), puoi accedere al tuo server, tramite SSH. Questa è la parte migliore. Non hai bisogno di alcuna configurazione (ammesso che tu non abbia impostato alcuna restrizione richiedere un corrispondente pubkey), puoi accedere con il tuo nome utente e password praticamente da qualsiasi luogo. Esistono anche client SSH per iOS e altri dispositivi mobili. Questa è una funzionalità molto potente di SSH che è solo parallela nella portabilità dalle applicazioni basate su browser.

Un codice locale Repo

Spero che tu possa vedere il potere di SSH in un ciclo di sviluppo giornaliero.

Immaginiamo che tu e alcuni amici stiate lavorando su qualche codice insieme. Diciamo anche che hai un computer locale che hai il pieno controllo su quello che usi come server LAMP di sviluppo con poche macchine virtuali installate su di esso. È possibile utilizzare SSH localmente per spostare file da e verso il computer e il computer di sviluppo. È anche possibile impostare un repository Git (o svn o Mercurial) locale, alimentato da SSH per tenere tutto sotto controllo. Forse potresti addirittura rendere la macchina di sviluppo l'unica macchina connessa al server remoto tramite SSH, in modo tale che il codice ha passare attraverso un processo di stadiazione specifico prima che possa essere messo in produzione. La spina dorsale di tutte queste azioni è SSH!

Speriamo che possiate vedere la potenza di SSH in un ciclo di sviluppo giornaliero, specialmente per i team che usano il controllo della versione. Come ho notato in precedenza, vi è abbondanza di documentazione e una miriade di altri strumenti a livello di rete basati o dipendenti da SSH che ti daranno maggiore controllo e potere sul tuo processo di sviluppo e sul tuo server. Chissà? Forse, un giorno, dopotutto potresti raddoppiare come amministratore di sistema!


Alcuni altri collegamenti utili

Ecco alcuni link utili per iniziare con SSH. È in giro da un po ', quindi c'è molta documentazione in giro.

  • Il manuale ufficiale di OpenSSH
  • Introduzione di Linux Journal a SSH

Grazie per aver letto!