Skoj med SSH
Del 1 - Surfa och chatta genom jobbig brandvägg
När jag nyligen bytte jobb så ville jag fortfarande hålla kontakten med de på gamla jobbet med något IM (instant messaging) program. Det vi hade använt var Gaim (Jabber). Men det nya jobbets brandvägg blockerar naturligtvis Jabber (och de flesta andra IM-program). Hur skulle jag nu bära mig åt för att hålla kontakten med mina gamla arbetskamrater?Jo, det visade sig att det nya jobbets brandvägg inte blockerar ssh (port 22). Många tror att ssh bara är en säkrare ersättning för telnet, men ssh är mycket mer än så. Det visade sig kunna lösa mitt IM-problem, utan problem. Först behövdes ett konto på en ssh-burk utanför jobbets brandvägg. Vi kan kalla burken för darkstar.myip.org och kontot för hac.
slav@jobbet:~$ ssh -N -D 1080 hac@darkstar.myip.org
Hmm, vad hände nu? Ssh startade just en krypterad proxytunnel från port 1080 på den lokala datorn (på jobbet) till darkstar (utanför jobbet). Tunneln funkar med alla program som har stöd för SOCKS.
I firefox ställer man in det via Edit->Preferences->Connection Settings och klickar i valet "Manual proxy configuration". Fyll i SOCKS Host: 127.0.0.1 och Port: 1080. Klart!
I Gaim ställer man in det via Preferences->Network. Välj Proxy type: SOCKS 5, Host: 127.0.0.1, Port: 1080. Proxy går också att ställa in manuellt för varje Gaimkonto (Konto->Modify->Show more options).
Del 2 - Omvänd tunnel genom helstängd brandvägg
Ännu coolare är 'ssh -R' som skapar en omvänd (reverse) tunnel, typ:slav@jobbet:~$ ssh -R 9999:localhost:22 hac@darkstar.myip.org bin/kick.sh
Nu blev det lite mer komplicerat, men vi börjar - bakifrån. bin/kick.sh är ett litet bashscript på darkstar som inte gör mycket förutom att sova och skicka något genom tunneln då och då. Ungefär så här:
#!/bin/sh while [ 1 ]; do echo -n .; sleep 1m; done
Scriptet skriver ut en . en gång i minuten för att tunneln inte ska gå ner på grund av inaktivitet.
Själva ssh-kommandot skapar en omvänd tunnel mellan jobbdatorn och darkstar. Den krypterade tunneln går från port 9999 på darkstar till port 22 på jobbdatorn. Rakt genom jobbets stängda brandvägg...
När jag kommer hem på kvällen kan jag logga in mot jobbdatorn genom att köra ssh mot port 9999 på darkstar (som ju är en tunnel mot port 22 på jobbdatorn):
jag@hemma:~$ ssh -p 9999 slav@darkstar.myip.org
slav@jobbet:~$
och vips är jag inne på jobbet, genom den stängda brandväggen.
Det känns dock lite osäkert att vem som helst kan försöka logga in på jobbdatorn så jag stänger port 9999 på darkstar för access utifrån. Sen får man logga in i två steg. Först vanlig ssh mot darkstar och sedan specialaren vidare mot jobbet:
jag@hemma:~$ ssh hac@darkstar.myip.org hac@darkstar:~$ ssh -p 9999 slav@localhost
slav@jobbet:~$
Jobbets brandvägg är alltså helt stängd utifrån. Det enda som krävs för att ovanstående ska funka är att port 22 är öppen för TCP-access inifrån jobbet ut mot internet.
Ytterligare tips
* Ersätt darkstar med hemdatorns ipadress (eller dnsnamn om den har det, se t ex ez-ipupdate).* Skulle port 22 vara stängd i jobbets brandvägg får man försöka hitta någon annan öppen port. Om t ex port 80 är öppen kan man starta en ssh-server på port 80 på en linuxburk som man har i sitt hemmanätverk. Sen är det bara att lägga till '-p 80' till ovanstående kommandon (de som ansluter från jobbet till darkstar). Har man en hårdvarubrandvägg hemma går det bra att köra ssh på port 22 som vanligt och port-forwarda anslutningar mot port 80 i hårdvarubrandväggen till port 22 på linuxdatorn.
* Skulle jobbet ha stängt alla portar för access utåt och endast tillåta websurfning via en http-proxy så misströsta ej. Det går att komma igenom med programmet httptunnel även om det blir lite mer komplicerat. Se dok för httptunnel samt Firewall-Piercing HOWTO.
* Dessa tips gäller inte bara för den som sitter bakom en brandvägg på jobbet. Det funkar lika bra om du t ex sitter på en skola.
* Det verka lite märkligt att lämna ett xterm-fönster igång när man går hem från jobbet. Då kan programmet screen komma väl till pass. Skriv bara screen och kör sen ssh-kommandot. När det startat, detatcha med knappkombinationen 'Ctrl-a d'. Nu kan du logga ut (men låt datorn stå på) och programmet fortsätter att köra i bakgrunden. Anslut till kommandot igen med 'screen -r'. Det går till och med att ansluta till screen genom tunneln (se till att inte stänga av tunneln av misstag dock, då kommer du inte in igen).
* En liten överkurs är att sätta upp ett lösenordslöst nyckelpar med 'ssh-keygen -t dsa' och kopiera den publika nyckeln till .ssh katalogen på darkstar (kalla filen authorized_keys2) och ha den privata nyckeln (id_dsa) på jobbdatorn. Sen kan man köra ssh från jobbet till darkstar utan lösenord. Varför? Jo, då kan man lägga tunnelkommandot inuti en while [ 1 ] loop så att tunneln återstartas om den skulle gå ned.
“