SSH

Secure Shell of SSH is een set van standaards en een hieraan verbonden netwerk protocol waarmee een veilige verbinding tussen de eigen pc een een andere (remote) computer op afstand. Hierbij wordt de zogenaamde public-key cryptografie gebruikt om de remote computer te identificeren en om (optie) de remote computer toe te staan de gebruiker te identificeren. SSH garandeert de vertrouwelijke en correcte data-overdracht tussen de twee computers via encryptie en message authentication codes (MACs). Een bekende toepassing van SSH is een login op een remote machine en vervolgens opdrachten uit te voeren, maar er worden ook tunneling, doorgeven van TCP poorts en X11 verbindingen ondersteund. Verder kunnen bestanden uitgewisseld worden via SFTP of SCP protocollen. Standaard gaat het dataverkeer van een server via de TCP poort 22.

Bovenstaande tekst is een samenvatting/vertaling van basisinformatie uit wikipedia over SSH (Engels).

Gebruiken van veilige protocollen in SSH

Een root login via ssh toestaan, is niet veilig. Het is dus niet zinvol om standaard als root user in te loggen. Debian wil standaad veilig zijn, niet onveilig. Vandaar dat een user maximaal 10 minuten heeft voor een zogenaamde dictionary password attack bij een SSH login. Maar het is uiteraard een keuze voor jezelf om de tijd en het aantal login pogingen vast te leggen!

Om de eigen SSH veiliger te maken, kan een tekstverwerker worden gebruikt.

Deze moet als root gestart worden waarna het bestand

/etc/ssh/sshd_config

geopend wordt.

Vervolgens gaan wij naar de volgende, te beveiligen, items en passen deze aan:

Poort (gewenste) <desired port>: Hier moet de correcte poort staat waar in de router de data-overdracht wordt toegestaan. Deze instelling voor de poort moet ook in de router-setup vastgelegd worden. Als je niet weet hoe dat gedaan kan worden, is het misschien niet verstandig dat je SSH remote zelf installeert. Debian heeft de poort 22 als default-waarde hiervoor. Maar het is slimmer een poort buiten de standard scan range hiervoor te gebruiken. In het voorbeeld wordt poort 5874 gebruikt:

Port 5874

ListenAddress <ip van de pc of van het netwerk interface>: Omdat hier sprake is van forwarding van een poort van je router, moet de pc een vast (static) ip adres in het netwerk hebben. Als je een lokale dns server gebruikt en je hebt deze uitleg hiervoor nodig, dan maak je waarschijnlijk een grote fout. Wij gaan dus verder met de uitleg gebaseerd op een vast ip adres:

ListenAddress 192.168.2.134

Hierna - protocol 2 is standaard in debian, maar voor de zekerheid gaan wij even kijken wat daar staat:

LoginGraceTime <toegestane tijd om aan te loggen in seconden>: Hier staat een vreemde standaard-waarde van 600 seconden. Ook als je slechts met twee vingers kan typen, heb je nooit 10 minuten nodig om je user name en password op te geven, dus maken wij hiervan:

LoginGraceTime 45

Je hebt zelf nu 45 seconden voor een login en de hackers hebben dus geen 600 seconden voor elke poging om je password te kraken.

PermitRootLogin <yes>: Waarom staat debian toe dat root mag inloggen PermitRootLogin 'yes'? Dat is onbegrijpelijk dus maken wij hiervan een 'no'.

PermitRootLogin no
StrictModes yes

MaxAuthTries <xxx>: Voor het aantal pogingen voor een login, kan je 3 of 4 keer vastleggen, maar niet meer dan dat. Veiliger is:

MaxAuthTries 2

Als onderstaande items niet voorkomen, kunnen deze worden toegevoegd (of aangepast):

AllowUsers <geef gebruikersnamen op, met spaties ertussen, die via ssh mogen inloggen>

AllowUsers <xxx>: Maak voor de zekerheid een aparte ssh only user aan met beperkte (user, niet root)rechten. Gebruik hiervoor adduser om deze gebruiker aan te maken en plaats de naam hier, zoals:

AllowUsers weesvoorzichtig

PermitEmptyPasswords <xxx>: Geef deze gebruiker een mooi lang password dat ook in een millioen jaren niet te raden is en sta alleen deze user toe om ssh te gebruiken. Als je een keer in de andere pc zit, kan je met su ook root worden. Sta dus nooit een leeg password toe:

PermitEmptyPasswords no

PasswordAuthentication <xxx>: Uiteraard, voor een password login, geen key login, worden passwords gebruikt:

PasswordAuthentication yes [unless using keys]

Tenslotte:

service ssh restart

Nu hebben wij iets dat een veiliger gebruik van SSH regelt. Het is nooit 100% waterdicht, maar wordt veel veiliger als je de ssh only user en het perfecte wachtwoord aanmaakt met adduser.

Notitie: Indien je een error bericht krijgt en ssh weigert je te verbinden, ga dan naar je $HOME en kijk in de verborgen folder .ssh en verwijder het bestand known_hosts en probeer de verbinding opnieuw. Deze fout treedt meestal op als je gebruik maakt van dynamische IP adressen (DCHP)

Gebruiken van een X-Window progamma via het netwerk en SSH

ssh -X allows you to log into a remote computer and have its graphical user interface X displayed on your local machine. As $user (and note the X is to be a capital):

$ ssh -X username@xxx.xxx.xxx.xxx (or IP)

Voer het wachtwoord van de gebruiker op de remote computer in en run de X-applicatie in de shell:

$ iceweasel OF oocalc OF oowriter OF kspread

Sommige echt langzame netwerk connecties vanaf je PC kunnen mogelijk profiteren van een compressie level waardoor de transmissie snelheid omhoog kan gaan, om dit te kunnen voeg je een extra optie toe, op snelle netwerken heeft dit echter een negatief effect:

$  ssh -C -X username@xxx.xxx.xxx.xxx (or IP)

LEES:

$man ssh

Notitie: Indien je een error bericht krijgt en ssh weigert je te verbinden, ga dan naar je $HOME en kijk in de verborgen folder .ssh en verwijder het bestand known_hosts en probeer de verbinding opnieuw. Deze fout treedt meestal op als je gebruik maakt van dynamische IP adressen (DCHP)

Het op afstand kopieren van bestanden en directories via SSH met scp

scp wordt via de commandoregel gebruikt , (terminal/cli), om bestanden te kopieren tussens hosts over een netwerk. Het maakt gebruik van ssh authentificatie en beveiliging voor de data transfer, daarom vraagt scp om wachtwoorden of passphrases zodat de filetransfer geauthentificeerd kan worden.

Er vanuit gaande dat je ssh rechten hebt op de remote PC of Server, staat scp het toe om partities, directories of bestanden te kopieren, van en naar die PC, naar een specifieke locatie of doel die je gekozen hebt, zolang je daarop ook de rechten hebt. Bijvoorbeeld, een PC of server waarop je rechten hebt om deze via je LAN te benaderen en bestanden mag plaatse, maar het kan ook een pc zijn ergens op de wereld, zolang je maar de rechten hebt, of gewoon het kopieren van data naar je USB harddisk die op je pc is aangesloten.

Je kunt de gehele inhoud van partities of directories kopieren met het commando scp -r. Let op het commando scp -r volgt ook de symbolic links welke zich in de directory structuur tegenkomt.

Voorbeelden:

Voorbeeld 1: Kopieren van een partitie:

scp -r <user>@xxx.xxx.x.xxx:/media/disk1part6/ /media/diskXpartX/

Voorbeeld 2: Kopieren van een directory op een paritie, in dit geval een directory met de naam photos in $HOME:

scp -r <user>@xxx.xxx.x.xxx:~/photos/ /media/diskXpartX/xx

Voorbeeld 3: Kopieren van een bestand van een directory op een partitie, in dit geval een bestand in $HOME:

scp <user>@xxx.xxx.x.xxx:~/filename.txt /media/diskXpartX/xx

Voorbeeld 4: Kopieren van een bestand op een partitie:

scp <user>@xxx.xxx.x.xxx:/media/disk1part6/filename.txt /media/diskXpartX/xx

Voorbeeld 5: Indien je al op de drive en directory staat en alles hierin wilt kopieren, gebruik je een ' . ' (punt) :

scp -r <user>@xxx.xxx.x.xxx:/media/disk1part6/filename.txt . 

Voorbeeld 6: Voor het kopieren van bestanden van je PC naar een andere gebruik je scp -r indien je een partitie of directory wilt kopieren):

scp /media/disk1part6/filename.txt <user>@xxx.xxx.x.xxx:/media/diskXpartX/xx

Lees ook de help pagina via:

man scp

Remote toegang via ssh met X-Forwarding van een Windows-PC:

* Download en brand de Cygwin XLiveCD
* Leg de CD in CD-ROM-speler van de Windows-PC en wacht op de autorun (de CD wordt geopend).
Klik "continue" als een shell venster wordt geopend en type:

ssh -X username@xxx.xxx.xxx.xxx

Let op: xxx.xxx.xxx.xxx is het IP-adres van de linux remote computer of de URL hiervan (bijv. dyndns.org account) en de username is natuurlijk 1 van de user namen die voorkomen op de machine. Na een succesvol login, start "kmail" om bijvoorbeeld je mails op te vragen!

Belangrijk: hosts.allow moet een regel bevatten waarin wordt toegestaan dat pc's van andere netwerken toegang kunnen verkrijgen. Als je via een NAT-Firewall of een router zit, moet je hiervoor controleren dat poort 22 wordt 'forwarded' naar de Linux-pc.

NOTITIE: Als je de ssh poort op een andere poort hebt gezet , dan de standaard poort 22, dan moet je deze poort specificeren bij het gebruik van sftp:

sftp://user@ip:port

'user@ip:port' is de standaard sytax voor veel programmas zoals sftp and smb

SSH met Konqueror

Konqueror en Krusader zijn beiden in staat om remote data te benaderen, door het gebruik vang sftp:// en gebruikt het ssh protocol.

Hoe werkt het:
1) Open een nieuwe Konqueror venster
2) Vul het volgende in het adresveld in: sftp://username@ssh-server.com

Voorbeeld 1:

sftp://aptosid1@remote_hostname_or_ip
 (Let op: Er komt een popup-scherm dat naar je SSH-password vraagt, dat dus intypen en hierna op OK.)

Voorbeeld 2:

sftp://username:password@remote_hostname_or_ip
(Hier wordt NIET naar een password gevraagd, maar direct verbonden.)

Voor een LAN-situatie:

sftp://username@10.x.x.x or 198.x.x.x.x
(Notitie: Een popup opend en vraagt je om je ssh wachtwoord, vul deze in en klik op OK)

De KonquerorSSH verbinding is nu gemaakt. In het Konqueror venster, kunnen bestanden op de SSH server bewerkt worden (bijv. copy/view) net alsof deze op de eigen pc zouden staan.

SSHFS - mounten/remote van een bestandssysteem

SSFS is een eenvoudige, snelle en veilige methode die gebruik maakt van FUSE om een bestandssysteem op afstand te mounten. Het enige dat hiervoor aan de server-kant nodig is, is een ssh daemon.

Op de client moet je waarschijnlijk sshfs installeren: het installeren van fuse en groups is niet nodig bij aptosid eros forward omdat het standaard geinstalleerd is:

Aan de client-kant (pc op afstand) moet waarschijnlijk eerst sshfs geïnstalleerd worden:

apt-get update && apt-get install sshfs

Hierna moet je je afmelden en opnieuw inloggen.

Mounten van een remote bestandssysteem is eenvoudig:

sshfs username@remote_hostname:directory local_mount_point

waarbij de username de account naam is op de remote host (van de pc op afstand dus):

Als geen mapnaam wordt toegevoegd, dan is de home directory van de remote user de standaard map die gemounted wordt.

Belangrijk: De dubbele punt : is belangrijk ook als er geen mapnaam wordt opgegeven!

Nadat het mounten heeft plaatsgevonden van de remote map, kan de map net als een locaal bestandssysteem gebruikt worden. Er kunnen bestanden worden bekeken, bewerkt en ook scripts worden uitgevoerd.

Als je de koppeling wilt verbreken, unmount de remote host door het volgende commando:

fusermount -u local_mount_point

Als je sshfs vaak gebruikt dan kan het zinvol zijn om in de fstab een extra regel op te nemen:

sshfs#username@remote_hostname://remote_directory /local_mount_point fuse user,allow_other,uid=1000,gid=1000,noauto,fsname=sshfs#username@remote_hostname://remote_directory  0 0 

Daarna verwijder het commentaar user_allow_other in /etc/fuse.conf:

 
 # Allow non-root users to specify the 'allow_other' or 'allow_root'
 # mount options.
 #
 user_allow_other

Hierdoor mag elke user die in de groep fuse voorkomt, een bestandssysteem mounten met het bekende mount commando:

mount /path/to/mount/point

Met deze regel in de fstab kan je ook op elk moment het umount commando gebruiken:

umount /path/to/mount/point

Om na te gaan of je als user lid bent van de fuse-group kan je het volgende commando gebruiken:

cat /etc/group | grep fuse

Hierna zie je iets als:

fuse:x:117: <username>

Als je gebruikersnaam niet voorkomt, gebruikt het adduser commando als root:

adduser <username> fuse

Let op: De "id" wordt in de lijst van de fuse-group niet getoond, totdat je je 1 keer hebt afgemeld en opnieuw bent ingelogd.

Nu wordt je gebruikersnaam getoond in de lijst en ben je in staat om het volgende commando uit te voeren:

mount local_mount_point

en

umount local_mount_point
Inhoud het laatst gewijzigd op 01/11/2011 0650 UTC