|
SSH onder Windows
Deze pagina is voornamelijk voor mezelf als naslagwerkje bedoeld...
Wat is
SSH?
SSH staat voor Secure SHell. Maar wat is het
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 is zeer veilig als het goed is opgezet, maar als de
zaak slecht is geconfigureerd of als je zwakke wachtwoorden gebruik biedt
het iemand die binnen weet te komen veel mogelijkheden!
SSH biedt een aantal mogelijkheden:
- 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 op
verschillende computers (bijvoorbeeld tussen je email-programma en de
email-server van je provider, als die SSH support; of naar je samba file server)
- SFTP, Secure FTP; een vervanging voor FTP waarbij alle gegevens versleutelt over het
internet gaan, inclusief je inloggegevens en SCP, Secure copy; een
veilige variant van het Linux CP (copy).
Client
en server
Hiertoe moet op beide computers een programma draaien, de server en de
client:
- De SSH-cliënt (aan de gebruikerskant).
Voor Windows is dit bijvoorbeeld PuTTY (wat een
command window a la DOS box opent op de remote computer), een X server
(voor grafische programma's) of een SSH-ready file transfer programma,
bijvoorbeeld het FileZilla
FTP programma. FileZilla 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 voor
FileZilla is WinSCP.
Linux/Ubuntu: hier zit ssh en scp 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 standaard, 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.
SSH op
Windows
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 door mij nog niet geteste SSH server voor
Windows is MobaSSH.
Daarnaast is er de (nog niet probleemloze) freeSSHd server (wel als administrator
runnen bij installatie en bij het bijwerken van de configuratie). Een derde
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.
- Een X server voor Windows is Xming, inclusief
OpenGL 3D graphics support. Een alternatief in Windows is Ubuntu in een virtual machine: ssh met de
-X optie opstarten, en test met bijvoorbeeld xterm
&, zou een nieuw window met een X-terminal moeten
openen.
Wachtwoorden
SSH heeft meerdere mogelijkheden om je te identificeren.
- 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.
De publieke sleutel zet je dus op de server. Als je PuTTYgen
gebruikt om de keys te maken, en je server openssh/dropbear draait,
kopiëer je vanuit PuTTYgen de tekst uit het veld 'Public key
for pasting into OpenSSH authorized_keys file' naar de file
.ssh/authorized_keys op de server (write-only voor gebruiker).
Bij Windows/freeSSHd moet je volgens
dit forum-artikel de publieke sleutelfile de login-naam geven, en in de
goede directory kopiëren.
De private key: opslaan als .ppk file voor gebruik met PuTTY. Voor
Linux/Ubuntu clients: laat PuTTYgen de private key als openSSH key
opslaan (via 'export openSSH key' in het Conversions-menu).
SSH op
de LinkSys NSLU2 netwerk fileserver
Recentelijk overgegaan op Debian op mijn
NSLU2, hier gebruik ik niet de openssh-server maar de meer
lichtgewicht dropbear. Werkt ook prima!
En met openssh-sftp-server heb je ook sftp access
Ik gebruik ssh met name om op afstand bij mijn samba file
server op de NSLU2 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 zelf gekozen waarde (boven de 1024,
b.v. 22222!). 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
in uNSLUng te herstarten niet zoals op de meeste systemen (als Debian)
/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 voorbeelden
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. Je kan op deze manier ook naar een andere computer op je lokale
netwerk (vul het bijhorende lokale ip-adres in, zie volgende sectie).
ssh -f -L2001:localhost:143 mailserver.example.com
X
server forwarding via SSH gateway (Linux)
Je kan via ssh ook grafische programma's opstarten, draaien op de
remote computer maar geven de output op de computer vanaf waar je bent
ingelogd. Een voorbeeld: start het remote programma xclock, en geeft
dit op je lokale computer weer (als X forwarding aan staat):
ssh -f remotesystem.com xclock
Maar hoe nu dit te veilig doen via een NSLU2 als gateway? Je moet
nu de X-programma's doortunnelen door de gateway naar de uiteindelijke lokale
computer.
- Eerst een ssh-tunnel opzetten naar de NSLU2, waarbij je een port
forward naar de sshd op de gewenste PC op je lokale netwerk
- Via de zo gecreëerde lokale poort (en over die tunnel) met een
tweede ssh de X server forwarden...
- Vanuit de nu draaiende ssh shell (op de thuis-PC) kan je daar X
applicaties als xeyes opstarten
Aannemend dat de thuisnetwerk-PC (op 192.168.1.112)
sshd heeft draaien op standaardpoort 22, gaat dat met de volgende
twéé regels:
ssh -2 -f -N -p <port> -L
12322:192.168.1.112:22
<nslu_ssh_username>@<extern_ipaddress>
ssh -C -X -p 12322 <username>@localhost
xeyes is een mooie app om dit te testen. Wel twee ssh-verbindingen
over elkaar heen... Twee keer encryptie (een keer op de thuisPC, een keer op
de NSLU2), gaat vast niet sneller. Netter misschien via de xauth
route? Meer in Putty
SSH Multi-hop X11 Forwarding, O'Reilly's artikelen Connecting
Through a Gateway Host en SSH Port
Forwarding. Kan het met één ssh en dan xauth
(apt-get install xbase-clients)?
Inloggen met keyfile/passphrase op ssh vanuit
Linux/Ubuntu
Vreemd genoeg soms 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>
Samba
via SSH
Voor het veilig via het internet benaderen van je lokale file server kan
je samba ook via SSH tunnelen. Zie hiervoor mijn samba
pagina.
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.
|