SSH onder Windows

Deze pagina is voornamelijk voor mezelf als naslagwerkje bedoeld, en met name voor SSH onder Windows...

SSH: de Secure SHell. Wat is dat eigenlijk? SSH is een communicatie-standaard (protocol) dat zorgt voor een beveiligde verbinding tussen twee computers, waarbij je vanaf de ene computer veilig op de andere in kunt loggen. Beveiligd betekent hier dat alle communicatie versleuteld (encrypted) is; zelfs het inlogproces. Dit is anders dan bij bijvoorbeeld het inloggen op je email-account: hier gaat je wachtwoord onversleuteld over het internet. Ook bied SSH heen en weer garanties dat jij (en de andere kant) ook bent wie je zegt dat je bent (authenticatie).

Let op! SSH bied iemand die binnen weet te komen (te) veel mogelijkheden, zeker als de zaak slecht is geconfigureerd of als je zwakke wachtwoorden gebruikt! Weet wat je doet!

SSH biedt een aantal mogelijkheden:

Meer (Engelstalige) info over SSH is te vinden op de SSH manual pages. Een uitgebreid boek er over: SSH, The secure Shell (the definitive guide) van O'Reilly.

  • Het op een beveiligde manier een command-prompt op een remote computer openen (en ook zelfs grafische programma's kunnen draaien, mits je een X-server hebt wat onder Windows niet standaard het geval is).
  • Het op zetten van een beveiligde tunnel tussen programma's (bijvoorbeeld tussen je email-programma en de email-server van je provider, als die SSH support)
  • SFTP, Secure FTP; een vervanging voor FTP waarbij alle gegevens versleutelt over het internet gaan, inclusief je inloggegevens.
  • SCP, Secure copy; een veilige variant van het Linux CP (copy), vergelijkbaar met SFTP.

Hiertoe moet op beide computers een programma draaien, de server en de client:

  • De SSH-cliënt (aan de gebrikerskant). Voor Windows is dit bijvoorbeeld PuTTY (wat een command window a la DOS box opent op de remote computer), of een SSH-ready file transfer programma, bijvoorbeeld het FileZilla FTP programma. Dit kan ook SFTP (secure FTP) aan, ook met public/private key identificatie (al is dat niet direct zichtbaar: gebruik van te voren het PUTTY pageant programma om de key te laden, en geef in FileZilla een leeg wachtwoord op). Een alternatief is WinSCP.
    Linux/Ubuntu: hier zit ssh doorgaans standaard bij. Equivalent van pageant is hier de ssh-agent; met het commando ssh-add om sleutels aan de vermoedelijk al standaard draaiende agent door te geven.
  • Aan de te contacteren kant een SSH-server (typisch de SSH deamon, sshd, genoemd, vanuit de Linux-wereld). Op veel computers (behalve Windows) zit dit al, tot en met de iPhone toe... Onder Linux is OpenSSH een veelgebruikte versie.

Op Windows zijn er standaard andere mogelijkheden, zoals 'remote desktop' en 'hulp op afstand', die de noodzaak van besturing via SSH kleiner maken. Ook een VNC als TightVNC kan een goede vervanging zijn.

Verschil met remote desktop is dat een SSH-verbinding een zelfstandige inlog doet, en niet meeloopt met de gebruiker achter de PC. Je bent dus onder een ander account ingelogd.

De cliënt legt de verbinding naar de server, en samen zetten ze de encryptie op.

Oorspronkelijk uit de Unix/Linux-wereld (waar deze programma's meestal standaard zijn geïnstalleerd) zijn er ook op Windows (incl Vista) goede mogelijkheden.

  • De meest gebruikte Windows SSH-client is PuTTY, verkrijgbaar op alle mogelijke platforms, zelfs op mijn mobiele telefoon (Qtek9100 met Windows Mobile: PocketPutty). Download de 'Windows installer for everything'. Heeft ook uitgebreide help.
  • Een andere, uitgebreidere versie is Tunnelier, voor persoonlijk gebruik ook gratis (heb er zelf geen ervaring mee).
  • Een gratis (maar nog niet probleemloze) SSH server onder Windows is freeSSHd (wel als administrator runnen bij installatie en bij het bijwerken van de configuratie). Een alternatief (en vermoedelijk stabieler) is de Cygwin sshd, maar hiervoor moet je Cygwin installeren (groot pakket). Let op: een ssh server stelt wel eisen aan hoe je router is geconfigureerd, zie mijn server pagina.

Wachtwoorden

SSH heeft meerdere mogelijkheden om je te identificeren.

Info over gebruik met keys? Zie HowTo SSH logins using keys (Engels).

  • Klassieke wachtwoorden zijn de meest voor de hand liggende manier, maar niet altijd de meest veilige (afhankelijk van je keuze kunnen ze bijvoorbeeld makkelijk te raden zijn). Is om veiligheidsredenen dan ook niet overal toegestaan, zelf heb ik deze mogelijkheid ook uitgezet (gebruik SSH om op afstand bij mijn NSLU2 netwerk file server te kunnen, wil ik wel veilig hebben)
  • Een andere methode is met elektronische sleutels. Hierbij maak je (met bijvoorbeeld PuTTYgen) een RSA public/private key paar, het publieke deel laat je op de server, het private deel houd je zelf bij je (op bv een USB stick). Ook hoort bij de private key een 'pass phrase' (wachtwoord). Dubbele veiligheid dus: een inbreker heeft zowel de file als de pass phrase nodig. Een Nederlandse handleiding hierover bij gebruik van PuTTY gevonden. Details afhankelijk van je programma's, configuratie en of je ssh1 of ssh2 gebruikt. Bij freeSSHd moet je volgens dit forum-artikel de publieke sleutelfile de login-naam geven, en in de goede directory kopiëren. Voor Linux/Ubuntu: laat PuTTYgen de private key als openSSH key opslaan (via 'export openSSH key' in het Conversions-menu).

SSH op de LinkSys NSLU2 netwerk fileserver

Ik gebruik ssh met name om op afstand bij mijn file server te kunnen. Ik heb mijn Linux NSLU2 'geopend' voor extra software packages met behulp van uNSLUng. Vervolgens heb ik het NSLU2 openSSH package geïnstalleerd ('ipkg install open-ssh'), plus het openssh-sftp-server pakket (anders wordt alleen SCP ondersteund, en dat werkt niet samen met FileZilla). Zie de nslu page UseOpenSSHForRemoteAccess voor meer details.

Wel heb ik voor de veiligheid de openssh configuratiefile wat aangepast, bijvoorbeeld om alleen met public/private key files te werken en niet met wachtwoorden (PasswordAuthentication no). Op deze manier heb je de private key file nodig om in te loggen (zie hierboven), en niet alleen maar een wachtwoord. Ook heb ik het standaard SSH poortnummer aangepast van poort 22 naar een andere willekeurige waarde (boven de 1024!). Meer details op de sshd_config man page. Bijwerken van de configuratiefile kan op de NSLU2 met de nano editor (ook eerst installeren): nano /opt/etc/openssh/sshd_config. Om sshd te herstarten hiet zoals op de meeste systemen /etc/init.d/sshd restart maar /opt/etc/init.d/S40sshd (raak je natuurlijk wel even je bestaande verbinding kwijt).

Daarna mijn router aangepast zodat de gekozen poort wordt doorgesluisd naar mijn NSLU2, en klaar (zie mij server pagina): ik kan via internet veilig op mijn NSLU2 inloggen. Zelfs met mijn Qtek9100 Windows Mobile mobieltje dank zij PocketPutty. Gezien ik van mijn provider geen vast IP adres heb, heb ik een account bij DynDNS: kan inloggen via <gekozennaam>.dyndns.org in plaats van een IP-adres te moeten onthouden.

SSH/Putty opties

SSH en Linux

SSH is meer gericht op Linux etc, hier is het ook standaard aanwezig. Om op je cliënt (dekstop) ook grafische windows te kunnen openen (niet standaard mogelijk onder Windows, zie verderop) moet je inloggen met de -X option (en X forwarding aan hebben staan op de server), bv SSH -X username@ipaddress

Een manier om dit vanuit Windows te doen is met Ubuntu in een virtual machine. Test met bijvoorbeeld xterm &, zou een nieuw window met een X-terminal moeten openen. Een alternatief is om Xming te installeren, een X server voor Windows, inclusief OpenGL 3D graphics support.

Zie ook: SSH tutorial for Linux

Een lijst van een paar nuttige opties/config items etc voor SSH (voor de ssh server zie de sshd_config man page)

Putty port forwarding:

Om bij Putty via een remote SSH server te linken naar een andere remote server (bijvoorbeeld een simpele webserver): Connection --> SSH --> tunnels; enable 'Remote ports do the same', source port is je lokale poort (bijvoorbeeld '8000'), destination is de IP:poort die je wilt bezoeken (bijvoorbeeld '192.168.1.200:8080'), enable 'Local' en 'auto'. Je kunt nu in je web browser 'http://127.0.0.1:8000' opgeven, en je wordt via Putty en je remote SSH server doorgelinkt naar '192.168.1.200:8080' op de remote site.

Tunneling (port forwarding) op Linux

Alleen maar een tunnel opzetten, geen terminal: de -f optie (bv voor secure mail; configureer je mailprogramma om localhost poort 2001 te gebruiken). -S ipv -f plaatst ssh niet in de achtergrond. localhost:143 specificeert de poort op de remote computer!

ssh -f -L2001:localhost:143 mailserver.example.com

Soortgelijk; maar start een remote programma, hier xclock, en geeft dit op je lokale computer weer (als X forwarding aan staat):

ssh -f remotesystem.com xclock

Inloggen met keyfile/passphrase op ssh vanuit Linux/ubuntu

Vreemd genoeg nog wat problemen om in te loggen met keyfile en passphrase vanuit Ubuntu; ssh-add accepteert de keyfile wel, maar inloggen gaat vervolgens nog steeds mis. Wat wel werkt is (met -p in geval je niet op poort 22 zit):

ssh -p <poortnummer> -i <keyfile> <user>@<remote>

Nog meer?

Problemen

freeSSHd lijkt nog behoorlijk te rammelen. Opzetten van accounts met elektronische sleutels is erg lastig (en mij niet gelukt); en met Putty krijg ik soms foutmeldingen. Ook de koppeling tussen de settings en de eigenlijke server lijkt niet altijd goed te lopen. Met PocketPutty lukt me nog niet om een verbinding op te zetten op mijn mobiele telefoon, wat naar een Linux SSHd wel prima lukt (PocketPuTTY ziet wel de host dus firewall lijkt OK geconfigureerd, maar ik zie geen prompt om username/password, krijg een foutmelding, zelfs bij Blowfish of 3DES encryptie).

freeSSHd altijd als administrator beheren! op de een of andere manier  kan ik, als de service loopt, deze niet vanuit het freeSSHd window configureren; moet hem eerst via task manager afschieten (draait op verkeerde account?). Daarna geen problemen om te starten/stoppen, en instellingen worden goed overgenomen.

SSH1/SSH2: er zijn twee versies van het SSH protocol, 1 en 2. Deze zijn niet compatibel. Meeste programma's tegenwoordig kunnen beiden aan, maar bijvoorbeeld de elektronische sleutels hebben een ander formaat.

Meer...

Nog mee bezig.

Valid HTML 4.01 Transitional
Top of page Opmerkingen, commentaar, feedback: mail naar , of stuur een one-liner via:
Je email/naam:  Je reactie: 
Nuttige site? Antwoorden gevonden? Zet dan een link naar mijn site op je eigen site, hebben anderen er misschien ook wat aan!