SSH Vad och Hur

Många webbutvecklare använder SSH ("Secure Shell") varje dag för att hantera sina servrar, säkerhetskopiera filer, arbeta på distans och en mängd andra uppgifter. Idag ska jag förklara vad SSH är, göra en kort historiköversikt, och slutligen lära dig hur du ställer upp den på din fjärrserver eller till och med ditt lokala nätverk. Låt oss börja!


En startförklaring

Om du läser det här är det troligt att du åtminstone är något bekant med Terminal (eller på Windows, något som Cygwin). Om så är fallet förstår du denna snabba funktionella förklaring av SSH.

SSH använder i huvudsak en nätverksanslutning för att komma in i Terminal på en annan dator.

Om du inte är bekant med Terminal finns det många förklaringar och nybörjare guider till Terminal, både här på Nettuts + och på annat håll. SSHs kraft är beroende av dess enkelhet; Genom att erbjuda dig tillgång till Terminal på en annan maskin skär SSH till jakten och ger dig full kontroll över en fjärrmaskin. Om du förstår kraften i Terminal och dess direkta anslutning till din lokala maskinens inre funktioner, förstår du SSH: s kraft!


En kort historia

SSH utvecklades i sitt modersmål 1995. Den primära utvecklaren Tatu Ylonen utvecklade den som det första säkra sättet att administrera ett avlägset UNIX-system. Föregående till SSH skickade de enda verktygen som fanns i information som lösenord i tydlig text.


Så, hur använder jag den?

Det finns en miljon guider där ute om hur man sätter igång med SSH. Vi kommer specifikt att täcka en metod idag. Första saker först, du vill se till att du har SSH på ditt system.

  • Mac - En version av OpenSSH kommer förinstallerad.
  • Windows - Följ en guide som den här eller den här för att få Cygwin och "openssh" -paketet installerat.
  • Linux - OpenSSH är sannolikt att installeras redan, men om det inte är det kan du följa samma guide för att få den installerad.

För att bestämma om SSH är installerat kör du "vilken ssh". Om Terminal returnerar något i linje med / Usr / bin / ssh, då är du snäll att gå! Annars följer du en av dessa guider för att få den installerad.

I den här artikeln antar jag att versionen du använder är OpenSSH; Det finns vissa konfigurationsskillnader som beror på din version av SSH. Vi förklarar hur man konfigurerar en Mac för att ansluta till en MediaTemple-server genom ett enda SSH-kommando. När du har installerat SSH på din maskin måste du se till att din målvärd har SSH aktiverat. SSH körs över port 22 som standard; du kan använda ett kommandoradsverktyg som nmap att pinga din server för att avgöra om port 22 accepterar inkommande anslutningar, så här:

 sudo nmap -sS hostname.com

Självklart har du förmodligen tillgång till det administrativa gränssnittet för servern. Se till att du tittar igenom alternativen och aktivera SSH. På en Mediatemple-server ligger denna konfiguration under Server Kontrollpanelen. Mediatemple SSH är tillgängligt med hjälp av [email protected]. Du kan lägga till användare på kontot, men för att hålla saker enkelt, använder vi [email protected].

När SSH är aktiverat (och du har ställt in ett root-lösenord i din serveradministratör) kan du köra följande rad till SSH i din server.

 ssh [email protected]

... där primarydomain.com är din primära domän MediaTemple. Du blir då uppmanad till ditt lösenord (vilket är root-lösenordet du ställt in på kontrollpanelen). Om du inte använder MediaTemple kan du också SSH direkt till din serverns IP-adress.

Om du använder delad hosting är det troligt att du inte loggar in som root. I stället loggar du in med ett användarkonto namn. Om du till exempel använder en tjänst som Site5 kan du logga in med ett användarnamn på en underdomän, så här:

 ssh anvä[email protected]

I slutändan kommer dessa konfigurationer att bero på ditt specifika webbserverns företag. Mer information finns i värdens dokumentation.

När du är "inskalad" kan du utföra kommandon och korsa filsystemet inom Terminal. Beroende på din åtkomstnivå kan du kanske installera saker på din server med apt-get eller wget-kommandon. Du kan hantera din Apache-server, redigera konfigurationsfiler med en terminalbaserad textredigerare, visa felloggar, rensa cachar, visa filer direkt på en server för att se till att de är rätt version och många andra systemadministrativa uppgifter på lägre nivå . Nu, vad om du ville göra snabbare med SSH?


Hur använder jag det ... Bättre?

Det finns massor av mäktiga saker som SSH öppnar upp till. Vi kommer att hoppa över några av dem (som en hel del är mer sysadminrelaterade, som tunneling). Men vi kommer att gå över några användbara knep.

Super-snabb inloggning

Du tänker på dig själv, "verkar som om det borde finnas ett snabbare sätt att göra detta." Du har rätt. Och där är. I stället för att behöva komma ihåg din domän, lösenord och användarnamn för varje server kan du ställa in några konfigurationer som gör det möjligt för dig att påskynda processen till något längs dessa linjer.

 ssh myserver

Med rätt konfiguration kan du köra detta och utan att behöva ange lösenord, IP-adresser eller långa domännamn, är du med! Återigen antar vi att du loggar in på en MediaTemple-server. Först kommer vi att generera ssh nycklar. Detta är i grunden en uppsättning krypterade nycklar som lever i ~ / .Ssh på din lokala maskin. Du har en "offentlig" nyckel och en "privat" nyckel. Så, först saker först, öppna ett nytt Terminal-fönster och skapa .ssh-mappen i din hemkatalog.

 mkdir ~ / .ssh

Därefter genererar du nycklarna med följande rad. (Detta kommer direkt från MediaTemples dokumentation.)

 ssh-keygen -t rsa -b 2048 -f ~ / .ssh / id_rsa -C "Kommentar om din nyckel går här."

Denna rad genererar en ssh-nyckel av typen rsa, med 2048 bitar (för säkerhet), vid den angivna filplatsen med den angivna kommentaren. Du kommer att bli promprted för ett lösenord, men det är inte obligatoriskt eller nödvändigt. Om du inte anger ett lösenord kan du automatiskt logga in. RSA-typen är för SSH-protokollversion 1. Typ DSA är för protokollversion 2. Kontrollera med din webbserver att du hittar ut vilken version de använder. När dina nycklar genereras kommer du då att köra detta för att se till att dina SSH-konfigurationer är inställda på rätt behörigheter.

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

Därefter laddar du upp din offentliga nyckel till din server. Det finns en hel del sätt att göra detta; det här sättet kommer från MediaTemples dokument också.

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

Den här koden echo din id_rsa.pub genom en '|' (pip) till nästa kommando, vilket är en SSH i [email protected], där du kommer att köra ett eko och sammanfogning av vad du piped i det första kommandot. Det låter lite komplicerat, så det finns några alternativa sätt att hantera detta. I grund och botten kommer du inte vilja ha några raster och din offentliga nyckel på egen rad i en fil, kallad authorized_keys på din server i ~ / .ssh / katalogen. Så om det här är den första eller enda tangenten du vill ha på din server kan du köra kommandot för att kopiera det direkt till den platsen.

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

Den här raden säger väsentligen: "Kopiera den här första filen via SSH till servern på den här platsen i förhållande till min nuvarande hemkatalog."

När din authorized_keys innehåller din allmänna nyckel kan du försöka logga in på servern med ssh anvä[email protected]. Om du lägger in din offentliga nyckel i rotkatalogens SSH-konfigurationsfiler kan du logga in direkt till rot. Du kommer att bli ombedd om ett RSA-fingeravtryck. fortsätt och tillåta denna åtgärd. Den lägger till servern som du ansluter till till en known_hosts-fil. Den här filen kan användas för många olika saker, men speciellt för att skydda dig mot det som kallas "man-i-mitten" -attack. Om du vill läsa lite mer om detta, kolla in denna förklaring.

Om du kan logga in på servern, som om du hade skrivit in ett lösenord fungerar dina nycklar korrekt. Nästa steg är att lägga till ett par rader för en genväg till en konfigurationsfil på din maskin. Öppna ~ / .ssh / config i din favorit textredigerare (skapa den om den inte existerar) och lägg till följande:

 Värdkortsnamn HostName somehost.com Användarnamn

Där "smeknamn" är ett smeknamn för servern du vill logga in på. Till exempel, "Host myserver" skulle tillåta mig att göra ssh myserver. HostName är din serverplats, och självklart är användaren ditt användarnamn. Du kanske har Användarrot vid denna plats. När den här filen är sparad borde du kunna köra ett enkelt kommando för att logga in på din server, så här:

 ssh smeknamn

Git utan ett nav

Observera: det här avsnittet kräver lite förtrogenhet med Git.

Du kan använda SSH för att skapa din egen Git repos på din server! Detta är användbart för företag som inte vill avslöja sin kod på GitHub av någon anledning, och det är bra att kunna trycka direkt från en lokal maskin till en Git repo på din egen server.

För att ställa in detta, se till att Git är installerat på både värd och din lokala dator. Du kan behöva gå igenom ditt webbserverföretag för att ha Git installerat. Nästa kör git init på din server på den plats som du vill att din Git repo ska vara. Naturligtvis kan du göra detta på hundra olika sätt, men om du föredrar att inte ha ett blott förråd, kan du använda grenar att trycka på från din lokala dator. Här är ett vanligt arbetsflöde.

 ssh [email protected] cd / path / till / repo git init git checkout -b staging git checkout master # koppla från shell session med hjälp av ctrl-d cd / local / repo git init git add. git commit -am "some message" git fjärr lägg till ursprung [email protected]: / path / to / repo git checkout -b staging git push originering ssh [email protected] cd / path / to / repo git sammanfoga staging

Vad som händer här är att du loggar in på servern, byter till önskad repo-sökväg, skapar ett förråd och lägger till en "staging" -gren som du kan trycka på från din lokala dator. Därefter skapar du din lokala repo och en motsvarande "staging" -gren på din lokala dator och lägger till filer för att spåra till repo. Därefter kommer ett första engagemang. Du lägger sedan till fjärrförvaret som ett alias av "ursprung". Därefter trycker du på den lokala avdelningsgrenen till "ursprungs" aliasens staging-gren. Slutligen ssar du tillbaka till servern och sammanfogar "staging" -grenen med standard "master" -grenen.

SFTP> FTP

Du kan också använda SSH-driven FTP (filöverföringsprotokoll), vilket i grund och botten är en säkrare (krypterad) version av FTP som körs över port 22 (istället för standard FTP-port 21). De flesta FTP-klienter stöder också SFTP. FileZilla (för Windows) och Hämta (för Mac) är två populära (och gratis) SFTP / FTP-klienter.

Enkel åtkomst till din server nästan överallt

Så länge du befinner dig runt en dator som är ansluten till internet, har en terminal och har SSH installerad (vilken Mac som helst kopplad till WiFi) kan du få tillgång till din server via SSH. Det är den bästa delen. Du behöver ingen konfiguration (förutsatt att du inte har ställt in några begränsningar som fordra en matchande pubkey), kan du logga in med ditt användarnamn och lösenord från praktiskt taget var som helst. Det finns även SSH-klienter för iOS och andra mobila enheter. Detta är en mycket kraftfull egenskap hos SSH som endast är parallell i bärbarhet av webbläsarbaserade applikationer.

En lokal kodreferens

Förhoppningsvis kan du se kraften i SSH i en daglig utvecklingscykel.

Låt oss föreställa oss att du och några kompisar arbetar tillsammans med någon kod. Låt oss också säga att du har en lokal dator som du har full kontroll över det du använder som en utvecklings LAMP-server med några VM installerade på den. Du kan använda SSH lokalt för att flytta filer till och från din dator och utvecklingsmaskinen. Du kan även skapa ett lokalt Git (eller svn eller Mercurial) repo, drivet av SSH för att hålla allt i kontroll. Kanske kan du till och med göra utvecklingsmaskinen den enda maskinen som är ansluten till fjärrservern via SSH, så att koden har att gå igenom en viss stagingprocess innan den kan sättas i produktion. Ryggraden för alla dessa åtgärder är SSH!

Förhoppningsvis kan du se kraften i SSH i en daglig utvecklingscykel, speciellt för lag som använder versionskontroll. Som jag påpekade tidigare finns det gott om dokumentation och en mängd andra verktyg på nätverksnivå baserat på eller beroende av SSH som ger dig mer kontroll och makt över din utvecklingsprocess och din server. Vem vet? Kanske, en dag kan du dubbelt som en sysadmin trots allt!


Några andra användbara länkar

Här är några andra användbara länkar för att komma igång med SSH. Det har funnits en stund, så det finns gott om dokumentation som flyter runt.

  • Den officiella OpenSSH manualen
  • Linux Journal introduktion till SSH

Tack för att du läser!