Nighthawk.dk

Secure Shell Basics (SSH)

Skrevet d. 15. Oct. 2020 af Claus Nielsen.

SSH bruges til at logge ind på en anden maskine via en sikker forbindelse i en terminal, f.eks. til at logge ind på en webserver eller supercomputer.

Secure Shell (SSH) kan give dig en terminal på en anden computer, så du kan arbejde på en anden computer uden at sidde ved den fysisk. Jeg brugte det i første omgang til at logge ind på supercomputere, når jeg skulle køre simuleringer der, men bruger det også mange andre steder.

Bemærk at når du logger ind på en anden computer vha. SSH er forbindelsen krypteret, i modsætning til f.eks. en forbindelse med telnet.

Forbind til remote host

Hvis du har en bruger kaldet user på en anden computer, som kører en SSH-server (dvs. stort set alle Linux-maskiner), kan du logge ind på computeren ved at åbne en terminal, og skrive:

ssh user@remote-host

Her er remote-host navnet på den computer, som du vil logge ind på - du kan f.eks. også bruge en IP-adresse. Dvs. hvis du vil logge ind på en computer med IP 10.0.0.42 kan du skrive ssh user@10.0.0.42

Du vil blive bedt om at indtaste dit password, og du vil derefter være inde på den anden maskine - men kun med dit terminalvindue. Du har nu bare en terminal på den computer du er logget ind på, så sørg for også at have styr på Bash.

Du kan stoppe ssh-sessionen ved at skrive exit.

Overførsel af filer via ssh

Når du har forbundet til en anden computer via ssh befinder du dig inde på den anden computer, og du kan ikke bare kopiere filer til/fra din egen computer med en normal cp-kommando eller lign.

Til gengæld findes der kommandoen scp, som kopierer en fil via en krypteret forbindelse (en ssh-forbindelse). Hvis du f.eks. vil hente filen ~/dokumenter/min_fil.txt ned fra IP 192.168.24.42, kan du bruge:

scp user@192.168.24.42:dokumenter/min_fil.txt .

Det er altså ligesom en cp-kommando, bortset fra at du skriver user@192.168.24.42: foran navnet på filen på den anden computer. Bemærk dog at du skal bruge scp fra din egen computer - du skal ikke starte nogen ssh-session først! På samme måde kan du kopiere en fil til den anden computer:

scp min_fil.txt user@192.168.24.42:dokumenter/

Efter : angiver du mappen på den anden computer, som du vil kopiere til (eller fra), og det vil være med udgangspunkt i mappen /home/user (også kaldet ~) hvor user er dit brugernavn på den anden computer. Hvis du f.eks. skriver :dokumenter/ bliver det derfor til /home/user/dokumenter/, og du kan angive en absolut sti ved f.eks. at skrive :/usr/local/include.

Som alternativ til scp kan du også bruge rsync.

SSH Config

Hvis du skal logge ind på en maskine flere gange med ssh kan du gemme brugernavn og hostname i din ssh-config. Din ssh-config ligger i filen ~/.ssh/config, men det er ikke sikkert at du allerede har filen - du er normalt nød til selv at lave den. Bemærk at mappen .ssh er en skjult mappe (idet navnet starter med punktum), så du kan ikke se den ved at bruge ls - dog kan du se skjulte filer og mapper med ls -a.

Hvis du ikke har brugt ssh før har du muligvis ikke mappen .ssh.

I din config-fil kan du lægge forskellige hosts ind ligesom i dette eksempel:

# SDU Supercomputer
Host abacus
	Hostname fe.deic.sdu.dk
	User myusername

# BeFrank webapp
Host befrank
	Hostname 207.154.227.194
	User myusername

# Nighthawk webapp
Host nighthawk-dk
	Hostname 46.101.227.210
	User myusername

Du kan have alle de hosts du vil, du skal bare angive tre parametre som ovenfor, og så kan du f.eks. skrive ssh nighthawk-dk i stedet for ssh myusername@46.101.227.210. Dvs. du kan vælge et simpelt navn du kan huske i stedet for f.eks. en IP-adresse og brugernavn.

Proxyjump

Lad os sige at du sidder ved computer A, som kan se computer B men ikke computer C. Til gengæld kan computer B godt se computer C. Hvis du skal logge ind på computer C er du nødt til først at logge ind på B med ssh user-on-B@host-B, og så derefter bruge ssh user-on-C@host-C.

Hvis du ofte skal ind på C, kan du sætte en ssh-config op på din computer (A) med et proxyjump:

Host B
	Hostname host-B
	User user-on-B

Host C
	Hostname host-C
	User user-on-C
	ProxyCommand ssh -W %h:%p B

Nu kan du logge direkte fra A ind på computer C ved bare at skrive ssh C. Du skal godt nok stadig indtaste passwords til både B og C, men det er stadig væsentligt nemmere.

No hang-up (nohup)

Hvis du kører en baggrundsprocess på en anden maskine vha. ssh (dvs. kører en kommando/et program med &, så det kører i baggrunden) så stoppes processen når du afbryder ssh-forbindelsen.

Nogle gange har du brug for at have baggrundsprocesser kørende selvom du afbryder din ssh-session, og til dette formål kan du bruge nohup ("No Hang-Up"): du skriver simpelthen bare nohup foran den kommando, som skal køre i baggrunden.