Vad är Reverse SSH Tunneling? (och hur man använder det)

By rik

Behöver du tillgång till en Linux-dator som verkar otillgänglig via SSH? Istället för att ge upp, låt datorn ”ringa” dig. Denna taktik skapar en omvänd anslutning som ger dig en fullfjädrad fjärr-SSH-session. Vi går igenom stegen.

När omvänd SSH-tunneling blir nödvändig

Ibland kan det vara komplicerat att nå vissa fjärrdatorer. Nätverket där de befinner sig kan ha strikta brandväggsinställningar, eller så har den lokala administratören implementerat komplicerade Nätverksadressöversättningsregler (NAT). Hur ansluter man då till en sådan dator om man absolut behöver göra det?

Låt oss benämna datorerna. Datorn du sitter vid är den ”lokala” datorn, eftersom den är nära dig. Datorn du vill ansluta till är ”fjärrdatorn”, eftersom den är på en annan plats.

I den här artikeln kommer vi att referera till fjärrdatorn som ”wdzwdz”, vilken kör Ubuntu Linux med en lila terminal. Den lokala datorn kallas ”Sulaco” och använder Manjaro Linux med en gul terminal.

Normalt sett skulle man initiera en SSH-anslutning från den lokala datorn till fjärrdatorn. Men detta är inte möjligt i det här scenariot. Oavsett vad det specifika nätverksproblemet är, är denna metod värdefull när en direkt SSH-anslutning till fjärrdatorn inte fungerar.

Om ditt eget nätverk är relativt enkelt konfigurerat, kan fjärrdatorn ansluta till dig. Detta ger dock inte tillgång till en fullständig kommandoradssession på fjärrdatorn. Men det skapar en grund. Nu har du en etablerad anslutning mellan de två datorerna.

Lösningen ligger i omvänd SSH-tunneling.

Vad är omvänd SSH-tunneling?

Omvänd SSH-tunneling låter dig använda den existerande anslutningen för att etablera en ny anslutning från din lokala dator tillbaka till fjärrdatorn.

Eftersom den initiala anslutningen gick från fjärrdatorn till dig, använder vi den ”baklänges” för att skicka data åt andra hållet. Eftersom SSH är en säker metod, skapar vi i praktiken en säker anslutning inuti en annan säker anslutning. Det innebär att din anslutning till fjärrdatorn fungerar som en privat tunnel i den ursprungliga anslutningen.

Därav namnet ”omvänd SSH-tunneling”.

Hur det fungerar

Omvänd SSH-tunneling bygger på att fjärrdatorn använder den etablerade anslutningen för att lyssna efter nya anslutningsförfrågningar från den lokala datorn.

Fjärrdatorn lyssnar på en specifik port på den lokala datorn. Om den detekterar en SSH-begäran till den porten, skickar den vidare anslutningsbegäran tillbaka till sig själv via den etablerade anslutningen. Detta skapar en ny anslutning från den lokala datorn till fjärrdatorn.

Det är faktiskt enklare att implementera än att förklara.

Använda omvänd SSH-tunneling

SSH är troligtvis redan installerat på din Linux-dator, men du kan behöva starta SSH-demonen (sshd) om din lokala dator inte har accepterat SSH-anslutningar tidigare.

sudo systemctl start sshd

För att säkerställa att SSH-demonen startar automatiskt vid varje omstart, använd följande kommando:

sudo systemctl enable sshd

På fjärrdatorn använder vi följande kommando:

Alternativet -R (omvänd) instruerar ssh att skapa nya SSH-sessioner på fjärrdatorn.
”43022:localhost:22” talar om för ssh att anslutningsförsök till port 43022 på den lokala datorn ska skickas vidare till port 22 på fjärrdatorn. Port 43022 valdes eftersom den listas som otilldelad. Det är inget speciellt med just det numret.
[email protected] är det användarkonto som fjärrdatorn kommer att ansluta till på den lokala datorn.

ssh -R 43022:localhost:22 [email protected]

Du kan se en varning om att du aldrig tidigare har anslutit till den lokala datorn. Eller så kan du se en varning när information om anslutningen läggs till i listan över kända SSH-värdar. Det du ser – om något – beror på om det tidigare har gjorts anslutningar från fjärrdatorn till den lokala datorn.

Du kommer att bli ombedd att ange lösenordet för det konto du använder för att ansluta till den lokala datorn.

Notera att kommandotolken ändras från [email protected] till [email protected] när anslutningen är etablerad.

Nu är vi anslutna till den lokala datorn från fjärrdatorn. Det betyder att vi kan ge kommandon till den. Låt oss använda kommandot ”who” för att visa inloggningarna på den lokala datorn.

who

Vi ser att användaren ”dave” är inloggad på den lokala datorn, och att fjärrdatorn har anslutit (med samma användaruppgifter) från IP-adressen 192.168.4.25.

Ansluta till fjärrdatorn

Eftersom anslutningen från fjärrdatorn har lyckats och fjärrdatorn nu ”lyssnar” efter anslutningar, kan vi prova att ansluta till fjärrdatorn från den lokala datorn.

Fjärrdatorn lyssnar på port 43022 på den lokala datorn. Så, lite kontra-intuitivt, för att ansluta till fjärrdatorn, ber vi ssh att ansluta till den lokala datorn på port 43022. Den anslutningsförfrågan kommer sedan att skickas vidare till fjärrdatorn.

ssh localhost -p 43022

Vi uppmanas att ange lösenordet för användarkontot och ansluter oss sedan till fjärrdatorn från den lokala datorn. Vår Manjaro-dator hälsar oss glatt med ”Välkommen till Ubuntu 18.04.2 LTS”.

Lägg märke till att kommandotolken har ändrats från [email protected] till [email protected] Vi har nått vårt mål: att upprätta en SSH-anslutning till vår svåråtkomliga fjärrdator.

Använda SSH med nycklar

För att göra anslutningen från fjärrdatorn till den lokala datorn smidigare, kan vi ställa in SSH-nycklar.

Skriv följande kommando på fjärrdatorn:

ssh-keygen

Du kommer att bli ombedd att ange en lösenfras. Du kan trycka på Enter för att hoppa över frågan om lösenfrasen, men det rekommenderas inte. Det skulle innebära att vem som helst som har tillgång till fjärrdatorn skulle kunna initiera en SSH-anslutning till din lokala dator utan att bli ombedd om ett lösenord.

Tre eller fyra ord åtskilda med symboler ger en stark lösenfras.

Dina SSH-nycklar kommer att genereras.

Vi måste överföra den publika nyckeln till den lokala datorn. Använd detta kommando:

ssh-copy-id [email protected]

Du kommer att bli ombedd att ange lösenordet för användarkontot du loggar in med, i det här fallet [email protected]

Första gången du initierar en anslutning från fjärrdatorn till den lokala datorn kommer du att behöva ange lösenfrasen. Du behöver inte ange lösenfrasen igen för framtida anslutningsförsök, så länge som terminalfönstret är öppet.

Tunnlar behöver inte vara skrämmande

Vissa tunnlar kan vara mörka och krokiga, men omvänd SSH-tunneling är inte så svårt att hantera om du förstår relationen mellan fjärrdatorn och den lokala datorn. Sedan är det bara att vända på det.