KALF Computertechniek

Deze pagina is laatst gewijzigd/aangepast op 06-06-2016

ssh: secure shell

De secure shell biedt directe en afgeschermde communicatiemogelijkheiden buiten én binnen het lokale netwerk,
Via de commandline/terminal kan zo onderhoud en configuratie van aangesloten host-computers plaatvinden danwel lokaal een programma opgestart worden dat op een andere computer geinstalleerd is.

Nog even voor de duidelijkheid, in dit geval is:

  • HOST= ssh-server; de computer op afstand.
  • GUEST= ssh-client: de lokale computer. (Windows & Mac via bv "Putty", Linux via ingebouwde client)

Daartoe hebben we op alle hosts een ssh server en op de guests in ieder geval een client nodig, controleer of er wellicht al een server actief is:

sudo service ssh status

Is dat niet het geval, start deze op met:

sudo service ssh start
als alles goed is volgt:
ssh start/running, process XXX
Indien de melding verschijnt dat het bestand/programma niet gevonden is, dienen we ssh eerst te installeren:
sudo apt-get install openssh-server openssh-client

Out-of-the-box zal SSH prima werken en fine-tuning van deze configuratie dient alleen in bijzondere gevallen plaats te vinden.

Zo'n bijzonder geval is het vrijgeven van de X-server op de hosts, zodat we op afstand grafische applicaties kunnen gaan gebruiken.(zie dit voorbeeld)

Edit sshd_config:
sudo nano /etc/ssh/sshd_config
#Zet op "yes" om grafische bewerking op afstand mogelijk te maken
X11Forwarding yes

# Voeg toe of haal # weg om afwijkende keyboard layouts te kunnen gebruiken
# en om ANSI tekens mogelijk te maken.
AcceptEnv LANG LC_*

# voeg toe als file transfer optie voor host: (secure file transport protocol)
Subsystem sftp /usr/lib/openssh/sftp-server

#Mogelijkheid om SSH toegang beperken voor anderen dan de opgesomde gebruikers, 
#niet perse nodig en kan uitgeschakeld worden door voor de regel een "#" te plaatsen
AllowUsers jan piet klaas katrijn asus n900 compaq 

Om het aanspreken van de hosts te vergemakkelijken, het in een terminal typen van bv. "compaq" is sneller dan "ssh gebruiker@10.0.0.15", voegen we toe aan het /home/naam/.bash_aliases bestand: (of maken het hiermee aan)

nano ~/,bash_aliases
type hier:
alias compaq='ssh -X hostusernaam@10.0.0.15'
alias xcompaq='xtightvncviewer 10.0.0.15:0'
# etc.. voer de overige hosts in
#
#Aliases voor gebruik buiten het LAN
alias naam1='ssh -X naam1@12.345.678.900'
alias naam1='xtightvncviewer 12.345.678.900:0'

"-X" is aan ssh toegevoegd om grafische mogelijkheden aan de verbinding toe te kennen, waardoor remote geinstalleerde programma's op een lokale computer gebruikt kunnen worden!

Maak de aliases geldig door:

source ~/.bash_aliases

Voor een uitgebreide verhandeling over de mogelijkheden van een .bash_aliases file, inclusief bruikbare voorbeeldbestanden, zie het forum op deze site.

Inloggen op een host kan nu gedaan worden door in een terminal te typen:

compaq

Bij het inloggen wordt eenmalig gevraagd of de host permanent als "vertrouwd" moet worden gekenmerkt: bevestig met "yes" en daarna wordt om het wachtwoord van de HOST gebruiker gevraagd.
Alsluiten kan door in de terminal "exit" te typen danwel door de grafische applicatie af te sluiten.

De volgende keer kunnen we bij het inloggen direct een applicatie opstarten:(let op de enkele aanhalingstekens!)

compaq 'naamvandeapplicatie'

inloggen "zonder" wachtwoord

..kan op twee manieren: veilig & onveilig.

eerst de veilige manier

Eerst maar de veilige manier, type daartoe in een terminal:

ssh-keygen

Er wordt nu een private en publieke sleutel aangemaakt:

$>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
12:34:f5:f9:1c:etc. user@machine

Kopieer deze sleutel naar de/een trusted apparaat in het LAN:

ssh-copy-id -i ~/.ssh/id_rsa user@machine2

de onveilig wijze :

Doe dit alleen op een gesloten LAN!! (het password file wordt nl. ongecodeerd opgeslagen)
Installeer met:

apt-get install sshpass

maak een bestand aan, b.v." ~/.passmach2" en type daarin slechts het wachtwoord benodigd voor de login op computer "mach2"

Het login commando wordt nu:

sshpass -f '~/passmach2' ssh -X user@mach2

Wel eerst éénmalig op de traditionele manier inloggen om systeem toe te voegen aan ".ssh/known_hosts"

Voeg deze commandoregel toe aan ~/.bash_aliases:

alias mach2='sshpass -f ~/passmach2' ssh -X user@mach2'

Puppy Linux: binnen een ssh X-sessie dient "Xauth" een authorisatie te geven voor gebruik van het "DISPLAY" (grafische schil). Puppy Linux heeft Xauth niet standaard onboard, waardoor ssh -X sessies op een remote Puppy niet mogelijk zijn. Xauth zal via een Debian pakket geinstalleerd moeten worden, maar daarover later.

De "xtightvncviewer" aliases dienen om de desktop op afstand te kunnen bedienen.
Installeer daartoe server en client op de guests en hosts:

sudo apt-get install xtightvncserver xtightvncviewer
Login net als bij SSH maar nu met:
xcompaq


puppy precise: ssh-server en /dev/null

Puppy is een uitzondering: de ssh-daemon zal niet opstarten door een error.

Na het opstarten van de daemon via
/etc/init.d/sshd start
verschijnt in /var/log/messages de volgende error:
auth.crit sshd[11724]: fatal: daemon() failed: No such device
Type de volgende regel om uit te vinden welk device het betreft:
grep -n '/dev/' /etc/rc.d/rc.sshd
Output zal ongeveer gelijk zijn als:
51: killall 2>/dev/null -TERM ${SSHD##*/} #Stop SSHD
60: killall 2>/dev/null -HUP ${SSHD##*/}   #Reload SSHD
"/dev/null" is in dit geval als "file" aangemaakt terwijl het een "node" dient te zijn.
De lastigste klus is om /dev/null te deleten omdat er na het verwijderen automatisch een nieuw bestand wordt aangemaakt.

Daarom in 1 commandregel:
rm /dev/null -f && mknod /dev/null c 1 3

(de -f optie voorkomt de vraag om bevestiging bij removal van /dev/null)

Voorbeeldbestanden

/etc/ssh/sshd_config (server)

# Package generated server configuration file
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
X11UseLocalhost no
AddressFamily inet  #toegevoegd omdat disabling van IPv6 X11Forwarding in de OpenSSH server "breekt"
AllowTcpForwarding yes

/etc/ssh/ssh_config (client)

# This is the ssh client system-wide configuration file.
Host *
ForwardX11 yes
ForwardX11Trusted yes
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no

Ga door naar het hoofdstuk over bestanden delen: NFS

Drucken