SSH är en livräddare när du behöver fjärrhantera en dator, men visste du att du också kan ladda upp och ladda ner filer också? Med SSH-nycklar kan du hoppa över att behöva ange lösenord och använda detta för skript!
Denna process fungerar på Linux och Mac OS, förutsatt att de är korrekt konfigurerade för SSH-åtkomst. Om du använder Windows kan du använd Cygwin för att få Linux-liknande funktioner , och med lite tweaking, SSH kommer också att köras .
Kopiera filer över SSH
Säker kopia är ett riktigt användbart kommando och det är väldigt enkelt att använda. Grundformatet för kommandot är som följer:
scp [options] original_fil destinationsfil
Den största kickern är hur man formaterar fjärrdelen. När du adresserar en fjärrfil måste du göra det på följande sätt:
användare @ server: sökväg / till / fil
Servern kan vara en URL eller en IP-adress. Detta följs av ett kolon, sedan sökvägen till filen eller mappen i fråga. Låt oss titta på ett exempel.
scp –P 40050 Desktop / url.txt [email protected]: ~ / Desktop / url.txt
Det här kommandot har [-P]-flaggan (notera att det är ett stort P). Detta gör att jag kan ange ett portnummer istället för standard 22. Detta är nödvändigt för mig på grund av hur jag har konfigurerat mitt system.
Därefter är min ursprungliga fil "url.txt" som finns i en katalog som heter "Desktop". Målfilen finns i “~ / Desktop / url.txt” vilket är detsamma som “/user/yatri/Desktop/url.txt”. Detta kommando körs av användaren "yatri" på fjärrdatorn "192.168.1.50".
Vad händer om du behöver göra motsatsen? Du kan kopiera filer från en fjärrserver på samma sätt.
Här har jag kopierat en fil från fjärrdatorns "~ / Desktop /" -mapp till min dators "Desktop" -mapp.
För att kopiera hela kataloger måste du använda flaggan [-r] (notera att det är gemener r).
Du kan också kombinera flaggor. Istället för
scp –P –r…
Du kan bara göra
SCP - Men ...
Den tuffaste delen här är att komplettering av flikar inte alltid fungerar, så det är bra att ha en annan terminal med en SSH-session igång så att du vet var du ska lägga saker.
SSH och SCP utan lösenord
Säker kopia är bra. Du kan placera den i skript och låta den göra säkerhetskopior till fjärrdatorer. Problemet är att du kanske inte alltid finns runt för att ange lösenordet. Och, låt oss vara ärliga, det är en verklig stor smärta att lägga in ditt lösenord till en fjärrdator som du uppenbarligen har tillgång till hela tiden.
Vi kan komma runt med lösenord med hjälp av nyckelfiler. Vi kan låta datorn generera två nyckelfiler - en allmänhet som hör till fjärrservern och en privat som finns på din dator och måste vara säker - och dessa kommer att användas istället för ett lösenord. Ganska bekvämt, eller hur?
Ange följande kommando på din dator:
ssh-keygen –t rsa
Detta genererar de två nycklarna och placerar dem i:
~ / .ssh /
med namnen "id_rsa" för din privata nyckel och "id_rsa.pub" för din offentliga nyckel.
När du har angett kommandot kommer du att bli tillfrågad var du ska spara nyckeln. Du kan trycka på Enter för att använda ovanstående standardvärden.
Därefter ombeds du ange en lösenfras. Tryck på Enter för att lämna det tomma, gör det sedan igen när det ber om bekräftelse. Nästa steg är att kopiera den offentliga nyckelfilen till din fjärrdator. Du kan använda scp för att göra detta:
Målet för din offentliga nyckel finns på fjärrservern, i följande fil:
~ / .ssh / auktoriserade_knappar2
Efterföljande offentliga nycklar kan läggas till den här filen, ungefär som filen ~ / .ssh / known_hosts. Detta innebär att om du vill lägga till en ny offentlig nyckel för ditt konto på den här servern, skulle du kopiera innehållet i den andra id_rsa.pub-filen till en ny rad i den befintliga authorized_keys2-filen.
Säkerhetsöverväganden
Är det inte mindre säkert än ett lösenord?
I praktisk mening, inte riktigt. Den privata nyckel som genereras lagras på den dator du använder och den överförs aldrig, inte ens för att verifieras. Den här privata nyckeln matchar ENDAST med den ENA offentliga nyckeln och anslutningen måste startas från den dator som har den privata nyckeln. RSA är ganska säker och använder en 2048 bitlängd som standard.
Det är faktiskt ganska lika i teorin som att använda ditt lösenord. Om någon känner till ditt lösenord går din säkerhet ut genom fönstret. Om någon har din privata nyckelfil förloras säkerheten för alla datorer som har matchande pubicnyckel, men de behöver åtkomst till din dator för att få den.
Kan detta vara säkrare?
Du kan kombinera ett lösenord med nyckelfiler. Följ stegen ovan, men ange en stark lösenfras. Nu när du ansluter via SSH eller använder SCP behöver du rätt privatnyckelfil såväl som rätt lösenfras.
När du har angett lösenfrasen en gång kommer du inte att bli ombedd igen förrän du avslutar sessionen. Det betyder att första gången du SSH / SCP måste du ange ditt lösenord, men alla efterföljande åtgärder kräver det inte. När du loggar ut från din dator (inte fjärrkontrollen) eller stänger terminalfönstret måste du ange det igen. På det här sättet offrar du inte riktigt säkerheten, men du trakasseras inte heller för lösenord hela tiden.
Kan jag återanvända det offentliga / privata nyckelparet?
Det här är en riktigt dålig idé. Om någon hittar ditt lösenord och du använder samma lösenord för alla dina konton, har de nu tillgång till alla dessa konton. På samma sätt är din privata nyckelfil också superhemlig och viktig. (För mer information, ta en titt på Så här återställer du efter att ditt e-postlösenord har äventyrats )
Det är bäst att skapa nya nyckelpar för varje dator och konto du vill länka. På det sättet, om någon av dina privata nycklar fastnar på något sätt, komprometterar du bara ett konto på en fjärrdator.
Det är också väldigt viktigt att notera att alla dina privata nycklar lagras på samma plats: i ~ / .ssh / på din dator kan du använd TrueCrypt för att skapa en säker, krypterad behållare skapa symlänkar i din ~ / .ssh / katalog. Beroende på vad jag gör använder jag det här super-paranoid supersäker metod för att lugna mig.
Har du använt SCP i några skript? Använder du nyckelfiler istället för lösenord? Dela din egen expertis med andra läsare i kommentarerna!