Met SSH Naar Huis (Mac en Ubuntu en een beetje windows)

Mac

Vanaf dat ik een fatsoenlijke internet verbinding heb maak ik altijd gebruik van remote managing software. Altijd wel een machine gehad die ik op afstand wilde kunnen bedienen. Ten tijde van de windows machines gebruikte ik Logmein, toen de windows machine vervangen werd door een Mac G4 gebruikte ik Logmein :-), Hey, if it ain broken, don fix it.. Maar na verloop van tijd struikelde ik over OpenSsh. SSH, Secure shell, stelt me in staat om een veilige verbinding tussen twee machines te starten, Ik geloof dat het oorspronkelijk van Unix komt. Osx is gebaseerd op Darwin, er zit dus gewoon een linux kernel onder. Op dat moment had ik dus een OSX hackintosh laptop een een Mac g4 als ‘server’ thuis staan. (Server: Sabnzbd als usenet downloader, Postfix als mail server, Samba als fileserver en Vnc gebruikte ik om de machine over te kunnen nemen.) En net zoals ik geen RDP poorten open zet op mijn firewall zet ik de poort (5900) van VNC ook niet open. Maar via SSH zou ik dus de poort voor VNC veilig over internet kunnen tunnelen. Dus ik installeerd OpenSSH op de mac server thuis, ik opende een hoge willekeurige poort op mijn router (XXXX) en liet deze doorzetten naar poort 22 op de Mac. (22 is de standaard ssh poort). En nu verbinden:

Vanuit een prompt op de laptop typte ik in :

ssh MacServerName -p XXXX

,waarbij XXXX die willekeurige hoge poort is die ik op de router had opengezet. En MacServerName de FQDN is waarmee je de machine kunt bereiken. En even later huppelde ik rond in de shell van de Server. Bestanden kopieren en dergelijke, heel handig. En nu de tunnel voor VNC. (Het onderstreepte is de tunnel):

ssh -L 5900:MacServerName:5900 MacServerName -p XXXX

,weer de welkomstprompt op de shell en verder geen verschil. Dat merk je pas als je je VNC client start en connect naar : localhost. De tunnel zet al het verkeer op 5900 door naar de machine waarop je via SSH bent ingelogged en dus neem je deze over. Kortom, met een scriptje verbind je met de machine en met je standaard software kun je de machine overnemen. Logmein gebruikte ik ineens een heel stuk minder.

Ubuntu

De mac server, op een respectabele leeftijd van meer dan 8 jaar, was uitgerust met een 800 Mhz processor, en daar begon ik wat ‘last’ van te krijgen. 4,7 GB aan data downloaden duurde op de ADSL verbinding ongeveer 70 minuten en het uitpakken van de data op deze machine duurde ongeveer 90 minuten. En met de Ubuntu Installatie op mijn nieuwe laptop had ik die Hackintosh ineens ‘over’. En de installatie van Ubuntu op de nieuwe notebook was zo makkelijk gegaan… Affijn, 45 minuten later had ik geen Hackintosh meer maar een extra Ubuntu 10.10 machine. En weer een halfuur later draaide Sabnzbd als download machine, was gnome mooi aangepast, remote desktop ingeschakeld en was OpenSsh geinstalleerd. Effe testen..

ssh -L 5900:UbuntuServer:5900 UbuntuServer -p XXXX

Wachtwoord ingevuld en hop ik was binnen. Nu de tunnel testen, via de “Werkplek op Afstand” (op mijn laptop heb ik de nederlandse taalpakketten geinstalleerd) vanaf mijn laptop verbonden naar “localhost” en hop, het grafische inlogscherm van de server staat voor mijn neus. En stel nu dat je niet het bureablad wilt overnemen, maar wel applicaties op afstand wilt draaien? Een soort van applicatie streaming? Dat kan ook, let op:

ssh -X -L 5900:UbuntuServer:5900 UbuntuServer -p XXXX

De -X na ssh zorgt ervoor dat de grafische omgeving (Xserver) van je machine op afstand wordt doorgestuurd naar de grafische omgeving op je lokale machine. Pardon? De explorer op gnome heet nautilus. Ik log met bovenstaand commando in op de server (machine op afstand) en typ op de prompt: nautilus. En hop, er wordt een ‘verkenner’ gestart op de machine op afstand maar het scherm draait op de lokale computer. Stel je wilt ‘even’ wat dingen verzetten, kopieren, in een dropbox zetten omdat je dat vergeten was..

In mijn lijstje in een van mijn eerder posts noemde ik virtualbox als mijn nieuwe virtualisatie platform (gratis, niet te zwaar en gebruiksvriendelijk) Stel nou dat je op je Ubuntu machine een Windows systeem virtueel draait en deze heb je in het netwerk (bridged) een eigen IP adress gegeven. En je hebt er RemoteDesktop van windows op ingeschakeld.

ssh -X -L 5900:UbuntuServer:5900 -L 3389:ip-adress-windows-machine:3389 UbuntuServer -p XXXX

Resumerend: Ik werk op afstand (op het lokale netwerk werkt dit natuurlijk ook, maar in mijn geval vervang ik XXXX dan door 22) en log via ssh in op de server. Ik typ in de sessie ‘nautilus’ en deze verschijnt dan op mijn lokale grafische sessie. Ik connect via vnc naar localhost (poort 5900) en ik zie het loginscherm van mijn ubuntu server. Ik start remote desktop en connect ook hier naar localhost en ik log in op de virtuele machine die op ubuntu draait. En dit allemaal vanuit .. maakt niet uit waar.. 🙂

Certificaten- 1

Nou wist ik dat dit ook allemaal zou moeten kunnen met certificaten in plaats van met wachtwoorden. Dit heb ik uitgedokterd met behulp van een forumpost. Quote: 1. Open a terminal on the client and run the following commands: Code:

$ mkdir -p $HOME/.ssh            #if not already there
$ chmod 0700 $HOME/.ssh               #if not already OK
$ ssh-keygen -t dsa -f $HOME/.ssh/id_dsa -P ''This should result in two files, $HOME/.ssh/id_dsa (private key) and $HOME/.ssh/id_dsa.pub (public key). The "-P ' ' " part of the last command helps create a key without a password, this is important. 2. Copy $HOME/.ssh/id_dsa.pub to the server. 3.Login to your server via ssh in the normal way. On the server run the following commands:       Code: 
$ mkdir $HOME/.ssh                 # if not already there
$ cat id_dsa.pub >> $HOME/.ssh/authorized_keys
$ chmod 0600 $HOME/.ssh/authorized_keys4.Delete the public key file   5. Logout of the server  

Voordeel? Je kunt vanaf de machine waar je begon altijd onder jouw account inloggen op de machine waar je het afmaakte,
ook bijvoorbeeld uit nautilus. Come Again? In nautilus heb je de optie 'Verbinden met server' onder het menu 'Bestand'.
Vul hier de naam van je server in en eventueel de poort, laat inlognaam en wachtwoord leeg en connect.
Ben je toch een beetje thuis 🙂

Certificaten-2

En dat kon dus ook een heeeeel stuk eenvoudiger.. PGP is standaard geinstalleerd op Ubuntu, en daar hoort een pakketje bij, genaamd seahorse. Als je deze, desnoods vanuit een terminal opstart, dan zie je dit:

Zag je de typfout :-)? Nou als je dit hebt gedaan zonder foutmeldingen dan kun je vanaf dat moment met die machine dus wachtwoordloos inloggen op de ssh server. Cool huh?

2 gedachten over “Met SSH Naar Huis (Mac en Ubuntu en een beetje windows)

  1. herry

    Dank voor de heldere uitleg. Toch blijf ik tegen een probleem aanlopen.

    Ik kom een eind maar voor mij zou het handig zijn om iets meer toelichting te hebben op de manier waarop de namen in de ssh verbinding worden gebruikt.

    Ik wil vanaf mijn macbook naar een laptop waar ubuntu 12.04 op draait. In eerste instantie gewoon in huis maar ik kom niet verder dan het openen van de verkenner (met nautilus). Het bureaublad krijg ik niet voor elkaar, ook weet ik niet wat je precies bedoeld met localhost.

    Volgens mij is het grootste probleem (naast mijn onkunde) dat als ik eenmaal via ssh de ubuntu laptop heb bereikt ik niet weet waar ik de verdere opdrachten moet geven, vanaf de mac of vanaf ubuntu.

    Ik zou enige hulp echt op prijs stellen.

    alvast bedankt.

    Reageren
    1. McVries Bericht auteur

      Hoi Herry,

      Als ik je vragen zo lees dan denk ik dat het goed is om even terug te gaan naar het begin.
      Ik doe hier wat aannames, maar verbeter me als het in jou geval anders gaat.
      Ik ga er van uit dat je bekend bent met de terminal? Deze heb je op de mac en je hebt deze op linux. Windows kent de dos prompt.
      Welnu, als je op je mac de terminal opent dan bedien je je mac, maar dan ‘onder de motorkap’. Start je een SSH verbinding naar ubuntu dan open je een terminal op je Ubuntu machine. Het plaatje is dan: je zit fysiek achter je mac, je hebt een terminal venster voor je neus, maar je werkt op ubuntu.
      Alles wat je daar intypt wordt uitgevoerd op de linux machine. Je kunt dit vaak aan de prompt zien. Die wordt ineens hetzelfde als op de server als je daar een terminal opent.
      Dit is uitermate geschikt voor terminal based applicaties.

      Heb je de ssh verbinding gestart met de optie -X dan heb je mogelijkheid om grafische applicaties op linux op te starten en het grafische deel naar je scherm op je mac te laten streamen. Nou is het echter zo, ik doe dit alleen van linux naar linux en zelfs dan nog dezelfde versies. Dus ik kan je geen garanties geven of dit van een mac ook werkt.

      Maar als ik verder lees in je vraag dan lijkt het erop dat je eigenlijk gewoon je desktop van de linux machine in zijn geheel wil overnemen, klopt dat?

      Localhost: dit is op elk systeem dat ik ken (linux, unix, osx en windows) hetzelfde. het is de hostnaam die je computer gebruikt om naar zijn loopback adres te verwijzen. en op alle systemen is dat 127.0.0.1 Wat? Nou, als je je computer aan een netwerk verbinding koppelt krijgt hij een ip adres, voor thuis netwerken vaak iets in de trant van 192.168.x.x of 10.0.x.x. Op bedrijfsnetwerken kiezen ze vaak iets in de richting van 172.x.x.x Echter heeft je computer altijd het ipadres 127.0.0.1 dat alleen maar vanaf je computer zelf te bereiken is. Kortom, op elk systeem kun je:
      ping 127.0.0.1
      doen en dan krijg je antwoord van je eigen computer.
      en locahost is de verwijzing naar dit adres, dus:
      ping localhost
      is exact hetzelfde.
      Kortom “localhost” is de computer zelf.

      En nou komt het kunstje met de portforwarding. Voorbeeld:
      Op poort 1000 van de machine op afstand draait een website. Dat betekend dat als ik op het netwerk zit en ik verbind met http://serveradres:1000 dan zie ik de website op die server, accoord?
      Nou ssh ik naar de server met portforwarding. Ik forward poort 100 van mijn lokale machine naar poort op 1000 op de machine waar ik naartoe verbind.
      Als ik nou op die computer (in jouw geval je mac) in de browser invoer : http://localhost:100 dan zorgt de tunnel er onder water voor dat ik de website op de server op poort 1000 te zien krijg. En de browser weet niet beter dan dat hij een pagina opvraagt die je zou hosten op je mac, ipv op de ubuntu machine.
      Nou zijn dit maar voorbeelden om het duidelijker te maken.

      Laat maar weten of je hier wat aan hebt gehad!

      Reageren

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

Houd mij op de hoogte van nieuwe reacties. Of abonneer jezelf op deze discussie zonder te reageren.