ssh(1): Skillnad mellan sidversioner
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
||
| Rad 1: | Rad 1: | ||
= | == SSH(1) — Linux manualsida == | ||
== NAMN == | == NAMN == | ||
ssh – OpenSSH SSH-klient ( | '''ssh''' – OpenSSH SSH-klient (program för fjärrinloggning) | ||
== SYNOPSIS == | == SYNOPSIS == | ||
<pre> | <pre> | ||
ssh [-1246AaCfgKkMNnqsTtVvXxYy] | ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] | ||
[-D [bind_address:]port] [-e escape_char] [-F configfile] | |||
[-D [ | [-i identity_file] [-L [bind_address:]port:host:hostport] | ||
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] | |||
[-p port] [-R [bind_address:]port:host:hostport] [-S ctl_path] | |||
[-l | [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command] | ||
</pre> | </pre> | ||
== BESKRIVNING == | == BESKRIVNING == | ||
'''ssh''' (SSH-klient) | '''ssh''' (SSH-klient) är ett program för att logga in på en fjärrmaskin och för att köra kommandon på en fjärrmaskin. Det är avsett att ersätta rlogin och rsh, och ge säker, krypterad kommunikation mellan två opålitliga värdar över ett osäkert nätverk. X11-anslutningar och godtyckliga TCP-portar kan också vidarebefordras över den säkra kanalen. | ||
'''ssh''' ansluter och loggar in på den angivna ''hostname'' (med valfritt användarnamn ''user''). Användaren måste bevisa sin identitet för fjärrmaskinen med någon av flera metoder beroende på vilken protokollversion som används (se nedan). | |||
Om ''command'' anges körs det på fjärrvärden i stället för ett inloggningsskal. | |||
== | == ALTERNATIV == | ||
'''''-1''''' | |||
Tvingar '''ssh''' att försöka använda endast protokoll version 1. | |||
'''''-2''''' | |||
Tvingar '''ssh''' att försöka använda endast protokoll version 2. | |||
'''''-4''''' | |||
Tvingar '''ssh''' att endast använda IPv4-adresser. | |||
'''''-6''''' | |||
''-f'' | Tvingar '''ssh''' att endast använda IPv6-adresser. | ||
'''''-A''''' | |||
Aktiverar vidarebefordran av autentiseringsagentens anslutning. Detta kan också anges per värd i en konfigurationsfil. | |||
Agentvidarebefordran bör användas med försiktighet. Användare som kan kringgå filrättigheter på fjärrvärden (för agentens Unix-domänsocket) kan nå den lokala agenten via den vidarebefordrade anslutningen. En angripare kan inte hämta nyckelmaterial från agenten, men kan utföra operationer med nycklarna som gör det möjligt att autentisera sig med identiteter som är inlästa i agenten. | |||
'''''-a''''' | |||
Inaktiverar vidarebefordran av autentiseringsagentens anslutning. | |||
'''''-b''''' ''bind_address'' | |||
Använd ''bind_address'' på den lokala maskinen som källadress för anslutningen. Endast användbart på system med fler än en adress. | |||
'''''-C''''' | |||
Begär komprimering av all data (inklusive stdin, stdout, stderr samt data för vidarebefordrade X11- och TCP-anslutningar). Komprimeringsalgoritmen är densamma som används av [[gzip(1)]], och ”nivån” kan styras av alternativet ''CompressionLevel'' för protokoll version 1. Komprimering är önskvärd på modemlinjer och andra långsamma anslutningar, men kan bara göra saker långsammare på snabba nät. Standardvärdet kan sättas per värd i konfigurationsfilerna; se ''Compression''. | |||
'''''-c''''' ''cipher_spec'' | |||
Väljer chifferspecifikation för att kryptera sessionen. | |||
Protokoll version 1 tillåter specifikation av ett enda chiffer. Stödda värden: ''3des'', ''blowfish'' och ''des''. ''3des'' (triple-des) är en encrypt-decrypt-encrypt-trippel med tre olika nycklar och anses säker. ''blowfish'' är ett snabbt blockchiffer; det verkar mycket säkert och är mycket snabbare än ''3des''. ''des'' stöds endast för interoperabilitet med äldre implementationer av protokoll 1 som inte stöder ''3des''; användning avråds starkt p.g.a. kryptografiska svagheter. Standard är ''3des''. | |||
För protokoll version 2 är ''cipher_spec'' en kommaseparerad lista av chiffer i prioriteringsordning. Se nyckelordet ''Ciphers'' i [[ssh_config(5)]] för mer information. | |||
'''''-D''''' [ ''bind_address'' : ] ''port'' | |||
Anger lokal ”dynamisk” portvidarebefordran på applikationsnivå. Detta fungerar genom att allokera en socket som lyssnar på ''port'' på den lokala sidan, valfritt bunden till ''bind_address''. När en anslutning görs till denna port vidarebefordras den över den säkra kanalen och applikationsprotokollet används för att avgöra vart man ska ansluta från fjärrmaskinen. För närvarande stöds SOCKS4 och SOCKS5 och '''ssh''' fungerar som en SOCKS-server. Endast root kan vidarebefordra privilegierade portar. Dynamisk vidarebefordran kan också anges i konfigurationsfilen. | |||
IPv6-adresser kan anges med alternativ syntax: [bind_address/ ]port eller genom att omge adressen med hakparenteser. Endast superuser kan vidarebefordra privilegierade portar. Som standard binds den lokala porten enligt ''GatewayPorts''. En explicit ''bind_address'' kan dock användas för att binda till en specifik adress. ''bind_address'' ''localhost'' betyder att lyssningsporten bara binds lokalt; tom adress eller ”*” betyder att porten ska vara tillgänglig från alla gränssnitt. | |||
'''''-e''''' ''escape_char'' | |||
Sätter escape-tecknet för sessioner med pty (standard: ”~”). Escape-tecknet känns bara igen i början av en rad. Escape följt av punkt ”.” stänger anslutningen; följt av control-Z suspenderar; följt av sig självt skickar escape-tecknet en gång. Tecknet ''none'' inaktiverar alla escapes och gör sessionen helt transparent. | |||
'''''-F''''' ''configfile'' | |||
Anger alternativ per-användare-konfigurationsfil. Om en konfigurationsfil anges på kommandoraden ignoreras den systemomfattande konfigurationsfilen (''/etc/ssh/ssh_config''). Standard per-användare-fil är ''~/.ssh/config''. | |||
'''''-f''''' | |||
Begär att '''ssh''' går till bakgrunden strax före kommandoexekvering. Detta är användbart om '''ssh''' kommer att fråga efter lösenord/lösenfraser men användaren vill ha processen i bakgrunden. Detta implicerar '''-n'''. Rekommenderat sätt att starta X11-program på fjärrsidan: <pre>ssh -f host xterm</pre> | |||
Om konfigurationsalternativet ''ExitOnForwardFailure'' är ''yes'' kommer en klient startad med '''-f''' att vänta på att alla fjärrvidarebefordringar har etablerats innan den lägger sig i bakgrunden. | |||
'''''-g''''' | |||
Tillåter fjärrvärdar att ansluta till lokalt vidarebefordrade portar. | |||
'''''-I''''' ''smartcard_device'' | |||
Anger enhet som '''ssh''' ska använda för att kommunicera med ett smartkort som lagrar användarens privata RSA-nyckel. Endast tillgängligt om smartkortsstöd kompilerats in. | |||
'''''-i''''' ''identity_file'' | |||
Väljer fil från vilken identiteten (privat nyckel) för RSA- eller DSA-autentisering läses. Standard: ''~/.ssh/identity'' (protokoll 1) och ''~/.ssh/id_rsa'' samt ''~/.ssh/id_dsa'' (protokoll 2). Identitetsfiler kan också anges per värd. Flera '''-i''' kan användas. | |||
'''''-K''''' | |||
Aktiverar GSSAPI-baserad autentisering och vidarebefordran (delegering) av GSSAPI-referenser till servern. | |||
'''''-k''''' | |||
Inaktiverar vidarebefordran (delegering) av GSSAPI-referenser till servern. | |||
'''''-L''''' [ ''bind_address'' : ] ''port'' : ''host'' : ''hostport'' | |||
Anger att den givna porten på den lokala (klient)värden ska vidarebefordras till angiven värd och port på fjärrsidan. Detta fungerar genom att lyssna på ''port'' lokalt (valfritt bunden till ''bind_address''). När en anslutning görs vidarebefordras den över den säkra kanalen och en anslutning görs från fjärrmaskinen till ''host:hostport''. Portvidarebefordran kan också anges i konfigurationsfilen. | |||
IPv6-adresser kan anges med alternativ syntax: [bind_address/ ]port/host/hostport eller genom att omge adressen med hakparenteser. Endast superuser kan vidarebefordra privilegierade portar. Standardbindning följer ''GatewayPorts''; explicit ''bind_address'' kan binda till specifik adress. ''localhost'' betyder endast lokalt; tom adress eller ”*” betyder alla gränssnitt. | |||
'''''-l''''' ''login_name'' | |||
Anger användare att logga in som på fjärrmaskinen. Kan också anges per värd i konfigurationsfilen. | |||
'''''-M''''' | |||
Sätter '''ssh'''-klienten i ”master”-läge för anslutningsdelning (multiplexing). Flera '''-M''' ger master-läge med bekräftelsekrav innan slavanslutningar accepteras. Se ''ControlMaster'' i [[ssh_config(5)]]. | |||
'''''-m''''' ''mac_spec'' | |||
För protokoll version 2: kommaseparerad lista av MAC-algoritmer i prioriteringsordning. Se ''MACs'' i [[ssh_config(5)]]. | |||
'''''-N''''' | |||
Kör inte något fjärrkommando. Användbart för enbart portvidarebefordran (endast protokoll 2). | |||
'''''-n''''' | |||
Omdirigerar stdin från ''/dev/null'' (förhindrar läsning från stdin). Måste användas när '''ssh''' körs i bakgrunden. Exempel: | |||
<pre> | |||
ssh -n shadows.cs.hut.fi emacs & | |||
</pre> | |||
Detta startar emacs på fjärrvärden och X11 vidarebefordras automatiskt. Fungerar inte om '''ssh''' behöver fråga efter lösenord/lösenfras; se även '''-f'''. | |||
'''''-O''''' ''ctl_cmd'' | |||
Styr en aktiv multiplexing-masterprocess. Giltiga kommandon: ''check'' (kontrollera att master kör) och ''exit'' (be master avsluta). | |||
'''''-o''''' ''option'' | |||
Anger alternativ i samma format som i konfigurationsfilen. Användbart för alternativ som saknar egen flagga. Se [[ssh_config(5)]] för fullständig lista och värden. | |||
Vanliga nyckelord (urval): | |||
<pre> | |||
AddressFamily, BatchMode, BindAddress, ChallengeResponseAuthentication, CheckHostIP, | |||
Cipher, Ciphers, Compression, CompressionLevel, ConnectionAttempts, ConnectTimeout, | |||
ControlMaster, ControlPath, DynamicForward, EscapeChar, ExitOnForwardFailure, | |||
ForwardAgent, ForwardX11, ForwardX11Trusted, GatewayPorts, GlobalKnownHostsFile, | |||
GSSAPIAuthentication, GSSAPIDelegateCredentials, HashKnownHosts, Host, HostName, | |||
IdentityFile, IdentitiesOnly, KbdInteractiveDevices, LocalCommand, LocalForward, | |||
LogLevel, MACs, NumberOfPasswordPrompts, PasswordAuthentication, Port, | |||
PreferredAuthentications, Protocol, ProxyCommand, PubkeyAuthentication, RekeyLimit, | |||
RemoteForward, RSAAuthentication, SendEnv, ServerAliveInterval, ServerAliveCountMax, | |||
StrictHostKeyChecking, TCPKeepAlive, Tunnel, TunnelDevice, User, UserKnownHostsFile, | |||
VerifyHostKeyDNS, VisualHostKey, XAuthLocation | |||
</pre> | |||
'''''-p''''' ''port'' | |||
Port att ansluta till på fjärrvärden. Kan anges per värd i konfigurationsfilen. | |||
'''''-q''''' | |||
Tyst läge. Undertrycker de flesta varningar och diagnostik. | |||
'''''-R''''' [ ''bind_address'' : ] ''port'' : ''host'' : ''hostport'' | |||
Anger att den givna porten på fjärrvärden (servern) ska vidarebefordras till angiven värd och port på den lokala sidan. Servern lyssnar på ''port'' och när anslutningar kommer vidarebefordras de över den säkra kanalen och en anslutning görs från den lokala maskinen till ''host:hostport''. | |||
Portvidarebefordran kan också anges i konfigurationsfilen. Privilegierade portar kan endast vidarebefordras när man loggar in som root på fjärrmaskinen. IPv6 kan anges med hakparenteser eller alternativ syntax: [bind_address/]host/port/hostport. | |||
Som standard binds lyssningssocketen på servern endast till loopback. Detta kan åsidosättas med ''bind_address''. Tom ''bind_address'' eller ”*” betyder alla gränssnitt. En explicit fjärr-''bind_address'' lyckas bara om serverns ''GatewayPorts'' är aktiverat (se [[sshd_config(5)]]). | |||
Om ''port''-argumentet är ”0” allokeras lyssningsport dynamiskt och rapporteras till klienten vid körning. | |||
'''''-S''''' ''ctl_path'' | |||
Anger platsen för en kontrollsocket för anslutningsdelning. Se ''ControlPath'' och ''ControlMaster'' i [[ssh_config(5)]]. | |||
'''''-s''''' | |||
Kan användas för att begära ett subsystem på fjärrsystemet. Subsystem är en SSH2-funktion som underlättar användning av SSH som säker transport för andra applikationer (t.ex. [[sftp(1)]]). Subsystemet anges som fjärrkommando. | |||
'''''-T''''' | |||
Inaktivera pseudo-tty-allokering. | |||
'''''-t''''' | |||
Tvinga pseudo-tty-allokering. Användbart för skärmbaserade program. Flera '''-t''' tvingar tty även om '''ssh''' saknar lokal tty. | |||
'''''-V''''' | |||
Visa versionsnummer och avsluta. | |||
'''''-v''''' | |||
Utförligt läge. Skriver debugmeddelanden om förloppet. Flera '''-v''' ökar utförligheten (max 3). | |||
'''''-W''''' ''host'' : ''port'' | |||
Begär att standard in och standard ut på klienten vidarebefordras till ''host:port'' över den säkra kanalen. Implicerar '''-N''', '''-T'', ''ExitOnForwardFailure'' och ''ClearAllForwardings'', och fungerar endast med protokoll version 2. | |||
'''''-w''''' ''local_tun'' [ : ''remote_tun'' ] | |||
Begär tunnel-enhetsvidarebefordran med angivna [[tun(4)]]-enheter mellan klienten (''local_tun'') och servern (''remote_tun''). | |||
Enheter kan anges med numeriskt ID eller nyckelordet ''any'' (nästa lediga). Om ''remote_tun'' inte anges används ''any''. Se även ''Tunnel'' och ''TunnelDevice'' i [[ssh_config(5)]]. Om ''Tunnel'' inte är satt blir standard tunnel-läge ''point-to-point''. | |||
'''''-X''''' | |||
Aktiverar X11-vidarebefordran. Kan också anges per värd. | |||
X11-vidarebefordran bör användas med försiktighet. Användare som kan kringgå filrättigheter på fjärrvärden (för användarens X-auktorisationsdatabas) kan nå den lokala X11-skärmen via den vidarebefordrade anslutningen. En angripare kan då t.ex. övervaka tangenttryckningar. | |||
Därför begränsas X11-vidarebefordran som standard av X11 SECURITY-tillägget. Se '''ssh -Y''' samt ''ForwardX11Trusted'' i [[ssh_config(5)]]. | |||
'''''-x''''' | |||
Inaktiverar X11-vidarebefordran. | |||
'''''-Y''''' | |||
Aktiverar ”betrodd” X11-vidarebefordran. Betrodd X11 påverkas inte av X11 SECURITY-kontroller. | |||
'''''-y''''' | |||
Skicka logginformation via [[syslog(3)]]. Standard är att skicka till stderr. | |||
'''ssh''' kan dessutom hämta konfigurationsdata från en per-användare-konfigurationsfil och en systemomfattande konfigurationsfil. Filformat och alternativ beskrivs i [[ssh_config(5)]]. | |||
'''ssh''' avslutas med returstatus från fjärrkommandot, eller med 255 om ett fel inträffade. | |||
== AUTENTISERING == | == AUTENTISERING == | ||
OpenSSH stöder protokoll 1 och 2 | OpenSSH-klienten stöder SSH-protokoll version 1 och 2. Protokoll 2 är standard; '''ssh''' faller tillbaka till protokoll 1 om den upptäcker att protokoll 2 inte stöds. Inställningarna kan ändras via ''Protocol'' i [[ssh_config(5)]], eller tvingas med '''-1''' och '''-2'''. | ||
Båda protokollen stöder liknande autentiseringsmetoder, men protokoll 2 föredras eftersom det har fler mekanismer för konfidentialitet (trafiken kan krypteras med t.ex. AES, 3DES, Blowfish, CAST128 eller Arcfour) och integritet (t.ex. hmac-md5, hmac-sha1, umac-64, hmac-ripemd160). Protokoll 1 saknar en stark integritetsmekanism. | |||
Tillgängliga metoder: GSSAPI-baserad autentisering, värdbaserad autentisering, publik nyckel, challenge-response, samt lösenord. Metoderna prövas i den ordningen (protokoll 2 kan ändra standardordningen med ''PreferredAuthentications''). | |||
'''Värdbaserad autentisering''' fungerar förenklat så här: Om klientmaskinen finns listad i ''/etc/hosts.equiv'' eller ''/etc/ssh/shosts.equiv'' på fjärrmaskinen och användarnamnen är samma på båda sidor, eller om ''~/.rhosts'' eller ''~/.shosts'' finns på fjärrmaskinen och innehåller en rad med klientmaskinens namn och användaren på den maskinen, så kan inloggning tillåtas – under förutsättning att servern också kan verifiera klientens värdnyckel (se ''/etc/ssh/ssh_known_hosts'' och ''~/.ssh/known_hosts''). Metoden stänger säkerhetshål relaterade till IP/DNS/routing-spoofing. (Observera: ''/etc/hosts.equiv'', ''~/.rhosts'' och rlogin/rsh-protokoll är i grunden osäkra och bör inaktiveras om man vill ha säkerhet.) | |||
'''Publik nyckel''' fungerar så här: Varje användare skapar ett nyckelpar (publik/privat). Servern känner till den publika nyckeln, och endast användaren känner till den privata. '''ssh''' implementerar detta automatiskt med RSA eller DSA. Protokoll 1 är begränsat till RSA, protokoll 2 kan använda båda. Filen ''~/.ssh/authorized_keys'' listar publika nycklar som får logga in. | |||
Nycklar skapas med [[ssh-keygen(1)]]. Den privata nyckeln sparas i ''~/.ssh/identity'' (protokoll 1), ''~/.ssh/id_dsa'' (protokoll 2 DSA) eller ''~/.ssh/id_rsa'' (protokoll 2 RSA). Publika nyckeln sparas i motsvarande ''.pub''-fil. Kopiera sedan den publika nyckeln till ''~/.ssh/authorized_keys'' på fjärrmaskinen. Därefter kan man ofta logga in utan lösenord. | |||
Det bekvämaste sättet att använda nycklar kan vara via en autentiseringsagent; se [[ssh-agent(1)]]. | |||
'''Challenge-response''' innebär att servern skickar ett ”challenge”-textstycke och ber om ett svar. Protokoll 2 tillåter flera utmaningar; protokoll 1 bara en. Exempel: BSD Authentication (se ''login.conf''(5)) och PAM (på vissa system). | |||
Om andra metoder misslyckas frågar '''ssh''' efter ett lösenord. Lösenordet skickas för kontroll, men eftersom kommunikationen är krypterad kan det inte ses av någon som lyssnar på nätet. | |||
'''ssh''' underhåller och kontrollerar automatiskt en databas över värdar den använts mot. Värdnycklar lagras i ''~/.ssh/known_hosts''. Dessutom kontrolleras ''/etc/ssh/ssh_known_hosts''. Nya värdar läggs automatiskt till. Om en värds identitet ändras varnar '''ssh''' och inaktiverar lösenordsautentisering för att motverka spoofing/”man-in-the-middle”. ''StrictHostKeyChecking'' styr inloggningar när värdnyckel är okänd eller ändrad. | |||
När identiteten accepterats kör servern angivet kommando eller ger användaren ett normalt skal. All kommunikation är krypterad. | |||
Om en pseudo-terminal allokerats (normal inloggning) kan användaren använda escape-tecken (se nedan). Om ingen pseudo-tty allokerats är sessionen transparent och kan användas för binär data. Att sätta escape-tecknet till ''none'' gör sessionen transparent även med tty. | |||
Sessionen avslutas när fjärrkommando/skalet avslutas och alla X11- och TCP-anslutningar har stängts. | |||
== ESCAPE-TECKEN == | == ESCAPE-TECKEN == | ||
När | När en pseudo-terminal begärts stödjer '''ssh''' flera funktioner via ett escape-tecken. | ||
Ett enda tilde-tecken kan skickas som '''~~''' eller genom att följa tilde med ett annat tecken än de som beskrivs nedan. Escape-tecknet måste alltid följa en newline för att tolkas som special. Escape-tecknet kan ändras med ''EscapeChar'' i konfigurationsfilen eller via '''-e'''. | |||
Stödda escapes (med standard ”~”): | |||
<pre> | <pre> | ||
~. | ~. Koppla från. | ||
~^Z | ~^Z Lägg ssh i bakgrunden. | ||
~# | ~# Lista vidarebefordrade anslutningar. | ||
~& | ~& Lägg ssh i bakgrunden vid utloggning när ssh väntar på att vidarebefordrade anslutningar/X11-sessioner ska avslutas. | ||
~? | ~? Visa lista över escape-tecken. | ||
~B | ~B Skicka BREAK till fjärrsystemet (endast protokoll 2 om motparten stöder det). | ||
~C | ~C Öppna kommandorad (lägga till/cancel portvidarebefordran, m.m.). | ||
~R | ~R Begär omnyckling (rekey) av anslutningen (endast protokoll 2 om motparten stöder det). | ||
</pre> | </pre> | ||
== TCP-VIDAREBEFORDRAN == | == TCP-VIDAREBEFORDRAN == | ||
Vidarebefordran av godtyckliga TCP-anslutningar över den säkra kanalen kan anges på kommandoraden eller i en konfigurationsfil. Ett exempel är en säker anslutning till en e‑postserver; ett annat är att passera brandväggar. | |||
Exempel: tunnla en IRC-session från klienten ''127.0.0.1'' (localhost) till fjärrservern ''server.example.com'': | |||
<pre> | <pre> | ||
$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10 | $ ssh -f -L 1234:localhost:6667 server.example.com sleep 10 | ||
$ irc -c '#users' -p 1234 pinky 127.0.0.1 | $ irc -c '#users' -p 1234 pinky 127.0.0.1 | ||
</pre> | </pre> | ||
Detta tunnlar en anslutning till IRC-servern, går in i kanalen ''#users'', smeknamn ''pinky'', via port 1234. Porten spelar ingen roll så länge den är >1023 och inte krockar med andra portar. Anslutningen vidarebefordras till port 6667 på fjärrservern (standard för IRC). '''-f''' lägger '''ssh''' i bakgrunden och fjärrkommandot ''sleep 10'' ger tid att starta tjänsten. Om inga anslutningar sker inom tidsgränsen avslutar '''ssh'''. | |||
== X11-VIDAREBEFORDRAN == | == X11-VIDAREBEFORDRAN == | ||
Om ''ForwardX11'' är ''yes'' (eller via '''-X''', '''-x''', '''-Y'') och användaren använder X11 (DISPLAY är satt), vidarebefordras X11-anslutningen till fjärrsidan så att program som startas på fjärrskalet går via den krypterade kanalen. Användaren ska normalt inte sätta DISPLAY manuellt. | |||
DISPLAY-värdet som sätts av '''ssh''' pekar på servermaskinen men med ett displaynummer större än noll; detta är normalt och beror på att '''ssh''' skapar en ”proxy”-X-server på servern. '''ssh''' sätter också upp Xauthority-data genom att skapa en slumpmässig cookie och verifiera vidarebefordrade anslutningar; den riktiga cookien skickas aldrig i klartext. | |||
Om ''ForwardAgent'' är ''yes'' (eller via '''-A'''/'''-a''') och användaren använder en agent, vidarebefordras agentanslutningen till fjärrsidan. | |||
== | == VERIFIERA VÄRDNYCKLAR == | ||
När man ansluter till en server första gången visas ett fingeravtryck av serverns publika nyckel (om inte ''StrictHostKeyChecking'' är avstängt). Fingeravtryck kan tas fram med [[ssh-keygen(1)]], t.ex.: | |||
<pre> | <pre> | ||
$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key | $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key | ||
</pre> | </pre> | ||
Det finns även stöd för visuell jämförelse av värdnycklar via ”random art”. Sätt ''VisualHostKey'' till ''yes'' för att få en liten ASCII-grafik vid varje inloggning. Mönstret är inte unikt, men ger en sannolikhetsindikator. | |||
''' | |||
För att lista fingeravtryck och random art för alla kända värdar: | |||
<pre> | |||
$ ssh-keygen -lv -f ~/.ssh/known_hosts | |||
</pre> | |||
Alternativt kan SSHFP-poster i DNS användas för att verifiera fingeravtryck (se ''VerifyHostKeyDNS'' i [[ssh_config(5)]]). Exempel på generering: | |||
<pre> | |||
$ ssh-keygen -r host.example.com. | |||
</pre> | |||
Kontrollera zonen: | |||
<pre> | |||
$ dig -t SSHFP host.example.com | |||
</pre> | |||
Anslut med fråga: | |||
<pre> | <pre> | ||
$ ssh -o "VerifyHostKeyDNS ask" host.example.com | |||
ssh - | </pre> | ||
== SSH-BASERADE VPN == | |||
'''ssh''' kan tunnla VPN-trafik via [[tun(4)]]. Serverns ''PermitTunnel'' i [[sshd_config(5)]] styr om och på vilken nivå (lager 2 eller 3) detta stöds. | |||
Exempel: koppla klientnätet 10.0.50.0/24 med fjärrnätet 10.0.99.0/24 via en punkt-till-punkt-länk (förutsatt att SSH-servern på gateway 192.168.1.15 tillåter det). | |||
# | På klienten: | ||
ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 | <pre> | ||
route add 10.0.50.0/24 10.1.1.1 | # ssh -f -w 0:1 192.168.1.15 true | ||
# ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252 | |||
# route add 10.0.99.0/24 10.1.1.2 | |||
</pre> | |||
På servern: | |||
<pre> | |||
# ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 | |||
# route add 10.0.50.0/24 10.1.1.1 | |||
</pre> | </pre> | ||
Klientåtkomst kan finjusteras via ''/root/.ssh/authorized_keys'' och serverns ''PermitRootLogin''. Exempel (för ”forced-commands-only”): | |||
<pre> | |||
tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane | |||
tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john | |||
</pre> | |||
== | Eftersom SSH-baserad VPN har en del overhead passar den ofta bättre för temporära upplägg (t.ex. trådlösa VPN). Mer permanenta VPN-lösningar kan göras med verktyg som ''ipsecctl''(8) och ''isakmpd''(8). | ||
; '''SSH_USE_STRONG_RNG''' | |||
== MILJÖ == | |||
'''ssh''' sätter normalt följande miljövariabler: | |||
''DISPLAY'' | |||
Anger platsen för X11-servern. Sätts automatiskt av '''ssh''' till formen ''hostname:n'' där ''hostname'' är värden där skalet kör och ''n'' är ett heltal ≥ 1. Detta specialvärde används för X11-vidarebefordran. Användaren bör normalt inte sätta DISPLAY manuellt, eftersom det gör X11-anslutningen osäker och kräver manuell hantering av auktorisationscookies. | |||
''HOME'' | |||
Sätts till sökvägen för användarens hemkatalog. | |||
''LOGNAME'' | |||
Synonym för USER; för kompatibilitet. | |||
''MAIL'' | |||
Sätts till sökvägen för användarens brevlåda. | |||
''PATH'' | |||
Sätts till standard-PATH enligt kompilering av '''ssh'''. | |||
''SSH_ASKPASS'' | |||
Om '''ssh''' behöver en lösenfras läser den från terminalen om den körs i terminal. Om ingen terminal finns men DISPLAY och SSH_ASKPASS är satta, körs programmet i SSH_ASKPASS och ett X11-fönster används för inmatning. Detta är användbart t.ex. från ''.xsession''. (Ibland behöver stdin omdirigeras från ''/dev/null''.) | |||
''SSH_AUTH_SOCK'' | |||
Anger sökvägen till en UNIX-domänsocket för agentkommunikation. | |||
''SSH_CONNECTION'' | |||
Fyra mellanslagsseparerade värden: klient-IP, klientport, server-IP, serverport. | |||
''SSH_ORIGINAL_COMMAND'' | |||
Innehåller ursprunglig kommandorad när ett ”forced command” körs. | |||
''SSH_TTY'' | |||
Namnet på tty-enheten associerad med aktuellt skal/kommando (inte satt om ingen tty). | |||
''TZ'' | |||
Anger aktuell tidszon om den var satt när demonen startades (värdet förs vidare till nya anslutningar). | |||
''USER'' | |||
Namnet på användaren som loggar in. | |||
Dessutom läser '''ssh''' ''~/.ssh/environment'' och lägger till rader av formen ''VARNAME=value'' om filen finns och om användare tillåts ändra sin miljö. Se ''PermitUserEnvironment'' i [[sshd_config(5)]]. | |||
''SSH_USE_STRONG_RNG'' | |||
Normalt omseedas OpenSSL:s slumptalsgenerator från ''/dev/urandom''. Om miljövariabeln är satt till annat än ''0'' omseedas den från ''/dev/random''. Antalet byte definieras av värdet (minst 6). Detta rekommenderas inte på datorer utan hårdvarubaserad slumpgenerator eftersom otillräcklig entropi kan blockera anslutningen tills entropi finns. | |||
== FILER == | == FILER == | ||
''~/.rhosts'' | |||
Används för värdbaserad autentisering. På vissa system kan den behöva vara världsläsbar om hemkatalogen ligger på NFS, eftersom [[sshd(8)]] läser den som root. Filen måste ägas av användaren och får inte vara skrivbar för andra. Rekommenderad behörighet: läs/skriv för användaren, inte åtkomlig för andra. | |||
''~/.shosts'' | |||
Används som ''.rhosts'' men tillåter värdbaserad autentisering utan att tillåta rlogin/rsh. | |||
''~/.ssh/'' | |||
Standardkatalog för användarspecifik konfiguration och autentiseringsinformation. Inget generellt krav att allt hålls hemligt, men rekommenderade rättigheter: läs/skriv/utför för användaren, ej åtkomlig för andra. | |||
''~/.ssh/authorized_keys'' | |||
Lista över publika nycklar (RSA/DSA) som får logga in som användaren. Format beskrivs i [[sshd(8)]]. Inte särskilt känslig, men rekommenderad behörighet: läs/skriv för användaren, ej åtkomlig för andra. | |||
''~/.ssh/config'' | |||
Per-användare-konfigurationsfil. På grund av missbrukspotential måste filen ha strikta rättigheter: läs/skriv för användaren, ej åtkomlig för andra. | |||
''~/.ssh/environment'' | |||
Extra definitioner av miljövariabler; se MILJÖ ovan. | |||
''~/.ssh/identity'', ''~/.ssh/id_dsa'', ''~/.ssh/id_rsa'' | |||
Privata nycklar. Känsliga data: ska vara läsbara av användaren men ej åtkomliga för andra (läs/skriv). '''ssh''' ignorerar en privat nyckelfil som är åtkomlig för andra. Nyckeln kan krypteras med en lösenfras (3DES). | |||
''~/.ssh/identity.pub'', ''~/.ssh/id_dsa.pub'', ''~/.ssh/id_rsa.pub'' | |||
Publika nycklar. Inte känsliga; kan vara läsbara för alla. | |||
''~/.ssh/known_hosts'' | |||
Lista över värdnycklar för värdar som användaren loggat in på och som inte redan finns i systemlistan. Se [[sshd(8)]] för format. | |||
''~/.ssh/rc'' | |||
Kommandon körs av '''ssh''' vid inloggning, precis före användarens skal (eller kommando) startas. Se [[sshd(8)]]. | |||
''/etc/hosts.equiv'' | |||
För värdbaserad autentisering. Ska endast vara skrivbar av root. | |||
''/etc/ssh/shosts.equiv'' | |||
Som ''hosts.equiv'', men utan att tillåta rlogin/rsh. | |||
''/etc/ssh/ssh_config'' | |||
Systemomfattande konfigurationsfil. Se [[ssh_config(5)]]. | |||
''/etc/ssh/ssh_host_key'', ''/etc/ssh/ssh_host_dsa_key'', ''/etc/ssh/ssh_host_rsa_key'' | |||
Innehåller privata delar av värdnycklar. För protokoll 1 måste '''ssh''' vara setuid root eftersom värdnyckeln är läsbar endast för root. För protokoll 2 används [[ssh-keysign(8)]] för åtkomst, vilket eliminerar kravet att '''ssh''' är setuid root vid värdbaserad autentisering. Som standard är '''ssh''' inte setuid root. | |||
''/etc/ssh/ssh_known_hosts'' | |||
Systemomfattande lista över kända värdnycklar. Ska vara förberedd av administratören och vara världsläsbar. Se [[sshd(8)]]. | |||
''/etc/ssh/sshrc'' | |||
Kommandon körs vid inloggning, precis före skal/kommando. Se [[sshd(8)]]. | |||
= | == IPV6 == | ||
IPv6-adresser kan användas överallt där IPv4-adresser används. I alla poster måste IPv6-adressen vara innesluten i hakparenteser. Obs: hakparenteser är metatecken för skalet och måste escap:as i skal. | |||
== SE ÄVEN == | |||
[[scp(1)]], [[sftp(1)]], [[ssh-add(1)]], [[ssh-agent(1)]], [[ssh-keygen(1)]], [[ssh-keyscan(1)]], [[tun(4)]], [[hosts.equiv(5)]], [[ssh_config(5)]], [[ssh-keysign(8)]], [[sshd(8)]] | |||
RFC: 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4335, 4344, 4345, 4419, 4716. | |||
== FÖRFATTARE == | |||
OpenSSH är en vidareutveckling av den ursprungliga fria ssh 1.2.12-utgåvan av Tatu Ylönen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt och Dug Song åtgärdade många buggar, återinförde nya funktioner och skapade OpenSSH. Markus Friedl bidrog med stöd för SSH-protokollversionerna 1.5 och 2.0. | |||
Versionen från 2 februari 2026 kl. 07.36
SSH(1) — Linux manualsida
NAMN
ssh – OpenSSH SSH-klient (program för fjärrinloggning)
SYNOPSIS
ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option]
[-p port] [-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command]
BESKRIVNING
ssh (SSH-klient) är ett program för att logga in på en fjärrmaskin och för att köra kommandon på en fjärrmaskin. Det är avsett att ersätta rlogin och rsh, och ge säker, krypterad kommunikation mellan två opålitliga värdar över ett osäkert nätverk. X11-anslutningar och godtyckliga TCP-portar kan också vidarebefordras över den säkra kanalen.
ssh ansluter och loggar in på den angivna hostname (med valfritt användarnamn user). Användaren måste bevisa sin identitet för fjärrmaskinen med någon av flera metoder beroende på vilken protokollversion som används (se nedan).
Om command anges körs det på fjärrvärden i stället för ett inloggningsskal.
ALTERNATIV
-1
Tvingar ssh att försöka använda endast protokoll version 1.
-2
Tvingar ssh att försöka använda endast protokoll version 2.
-4
Tvingar ssh att endast använda IPv4-adresser.
-6
Tvingar ssh att endast använda IPv6-adresser.
-A
Aktiverar vidarebefordran av autentiseringsagentens anslutning. Detta kan också anges per värd i en konfigurationsfil.
Agentvidarebefordran bör användas med försiktighet. Användare som kan kringgå filrättigheter på fjärrvärden (för agentens Unix-domänsocket) kan nå den lokala agenten via den vidarebefordrade anslutningen. En angripare kan inte hämta nyckelmaterial från agenten, men kan utföra operationer med nycklarna som gör det möjligt att autentisera sig med identiteter som är inlästa i agenten.
-a
Inaktiverar vidarebefordran av autentiseringsagentens anslutning.
-b bind_address
Använd bind_address på den lokala maskinen som källadress för anslutningen. Endast användbart på system med fler än en adress.
-C
Begär komprimering av all data (inklusive stdin, stdout, stderr samt data för vidarebefordrade X11- och TCP-anslutningar). Komprimeringsalgoritmen är densamma som används av gzip(1), och ”nivån” kan styras av alternativet CompressionLevel för protokoll version 1. Komprimering är önskvärd på modemlinjer och andra långsamma anslutningar, men kan bara göra saker långsammare på snabba nät. Standardvärdet kan sättas per värd i konfigurationsfilerna; se Compression.
-c cipher_spec
Väljer chifferspecifikation för att kryptera sessionen.
Protokoll version 1 tillåter specifikation av ett enda chiffer. Stödda värden: 3des, blowfish och des. 3des (triple-des) är en encrypt-decrypt-encrypt-trippel med tre olika nycklar och anses säker. blowfish är ett snabbt blockchiffer; det verkar mycket säkert och är mycket snabbare än 3des. des stöds endast för interoperabilitet med äldre implementationer av protokoll 1 som inte stöder 3des; användning avråds starkt p.g.a. kryptografiska svagheter. Standard är 3des.
För protokoll version 2 är cipher_spec en kommaseparerad lista av chiffer i prioriteringsordning. Se nyckelordet Ciphers i ssh_config(5) för mer information.
-D [ bind_address : ] port
Anger lokal ”dynamisk” portvidarebefordran på applikationsnivå. Detta fungerar genom att allokera en socket som lyssnar på port på den lokala sidan, valfritt bunden till bind_address. När en anslutning görs till denna port vidarebefordras den över den säkra kanalen och applikationsprotokollet används för att avgöra vart man ska ansluta från fjärrmaskinen. För närvarande stöds SOCKS4 och SOCKS5 och ssh fungerar som en SOCKS-server. Endast root kan vidarebefordra privilegierade portar. Dynamisk vidarebefordran kan också anges i konfigurationsfilen.
IPv6-adresser kan anges med alternativ syntax: [bind_address/ ]port eller genom att omge adressen med hakparenteser. Endast superuser kan vidarebefordra privilegierade portar. Som standard binds den lokala porten enligt GatewayPorts. En explicit bind_address kan dock användas för att binda till en specifik adress. bind_address localhost betyder att lyssningsporten bara binds lokalt; tom adress eller ”*” betyder att porten ska vara tillgänglig från alla gränssnitt.
-e escape_char
Sätter escape-tecknet för sessioner med pty (standard: ”~”). Escape-tecknet känns bara igen i början av en rad. Escape följt av punkt ”.” stänger anslutningen; följt av control-Z suspenderar; följt av sig självt skickar escape-tecknet en gång. Tecknet none inaktiverar alla escapes och gör sessionen helt transparent.
-F configfile
Anger alternativ per-användare-konfigurationsfil. Om en konfigurationsfil anges på kommandoraden ignoreras den systemomfattande konfigurationsfilen (/etc/ssh/ssh_config). Standard per-användare-fil är ~/.ssh/config.
-f
Begär att ssh går till bakgrunden strax före kommandoexekvering. Detta är användbart om ssh kommer att fråga efter lösenord/lösenfraser men användaren vill ha processen i bakgrunden. Detta implicerar -n. Rekommenderat sätt att starta X11-program på fjärrsidan:
ssh -f host xterm
Om konfigurationsalternativet ExitOnForwardFailure är yes kommer en klient startad med -f att vänta på att alla fjärrvidarebefordringar har etablerats innan den lägger sig i bakgrunden.
-g
Tillåter fjärrvärdar att ansluta till lokalt vidarebefordrade portar.
-I smartcard_device
Anger enhet som ssh ska använda för att kommunicera med ett smartkort som lagrar användarens privata RSA-nyckel. Endast tillgängligt om smartkortsstöd kompilerats in.
-i identity_file
Väljer fil från vilken identiteten (privat nyckel) för RSA- eller DSA-autentisering läses. Standard: ~/.ssh/identity (protokoll 1) och ~/.ssh/id_rsa samt ~/.ssh/id_dsa (protokoll 2). Identitetsfiler kan också anges per värd. Flera -i kan användas.
-K
Aktiverar GSSAPI-baserad autentisering och vidarebefordran (delegering) av GSSAPI-referenser till servern.
-k
Inaktiverar vidarebefordran (delegering) av GSSAPI-referenser till servern.
-L [ bind_address : ] port : host : hostport
Anger att den givna porten på den lokala (klient)värden ska vidarebefordras till angiven värd och port på fjärrsidan. Detta fungerar genom att lyssna på port lokalt (valfritt bunden till bind_address). När en anslutning görs vidarebefordras den över den säkra kanalen och en anslutning görs från fjärrmaskinen till host:hostport. Portvidarebefordran kan också anges i konfigurationsfilen.
IPv6-adresser kan anges med alternativ syntax: [bind_address/ ]port/host/hostport eller genom att omge adressen med hakparenteser. Endast superuser kan vidarebefordra privilegierade portar. Standardbindning följer GatewayPorts; explicit bind_address kan binda till specifik adress. localhost betyder endast lokalt; tom adress eller ”*” betyder alla gränssnitt.
-l login_name
Anger användare att logga in som på fjärrmaskinen. Kan också anges per värd i konfigurationsfilen.
-M
Sätter ssh-klienten i ”master”-läge för anslutningsdelning (multiplexing). Flera -M ger master-läge med bekräftelsekrav innan slavanslutningar accepteras. Se ControlMaster i ssh_config(5).
-m mac_spec
För protokoll version 2: kommaseparerad lista av MAC-algoritmer i prioriteringsordning. Se MACs i ssh_config(5).
-N
Kör inte något fjärrkommando. Användbart för enbart portvidarebefordran (endast protokoll 2).
-n
Omdirigerar stdin från /dev/null (förhindrar läsning från stdin). Måste användas när ssh körs i bakgrunden. Exempel:
ssh -n shadows.cs.hut.fi emacs &
Detta startar emacs på fjärrvärden och X11 vidarebefordras automatiskt. Fungerar inte om ssh behöver fråga efter lösenord/lösenfras; se även -f.
-O ctl_cmd
Styr en aktiv multiplexing-masterprocess. Giltiga kommandon: check (kontrollera att master kör) och exit (be master avsluta).
-o option
Anger alternativ i samma format som i konfigurationsfilen. Användbart för alternativ som saknar egen flagga. Se ssh_config(5) för fullständig lista och värden.
Vanliga nyckelord (urval):
AddressFamily, BatchMode, BindAddress, ChallengeResponseAuthentication, CheckHostIP, Cipher, Ciphers, Compression, CompressionLevel, ConnectionAttempts, ConnectTimeout, ControlMaster, ControlPath, DynamicForward, EscapeChar, ExitOnForwardFailure, ForwardAgent, ForwardX11, ForwardX11Trusted, GatewayPorts, GlobalKnownHostsFile, GSSAPIAuthentication, GSSAPIDelegateCredentials, HashKnownHosts, Host, HostName, IdentityFile, IdentitiesOnly, KbdInteractiveDevices, LocalCommand, LocalForward, LogLevel, MACs, NumberOfPasswordPrompts, PasswordAuthentication, Port, PreferredAuthentications, Protocol, ProxyCommand, PubkeyAuthentication, RekeyLimit, RemoteForward, RSAAuthentication, SendEnv, ServerAliveInterval, ServerAliveCountMax, StrictHostKeyChecking, TCPKeepAlive, Tunnel, TunnelDevice, User, UserKnownHostsFile, VerifyHostKeyDNS, VisualHostKey, XAuthLocation
-p port
Port att ansluta till på fjärrvärden. Kan anges per värd i konfigurationsfilen.
-q
Tyst läge. Undertrycker de flesta varningar och diagnostik.
-R [ bind_address : ] port : host : hostport
Anger att den givna porten på fjärrvärden (servern) ska vidarebefordras till angiven värd och port på den lokala sidan. Servern lyssnar på port och när anslutningar kommer vidarebefordras de över den säkra kanalen och en anslutning görs från den lokala maskinen till host:hostport.
Portvidarebefordran kan också anges i konfigurationsfilen. Privilegierade portar kan endast vidarebefordras när man loggar in som root på fjärrmaskinen. IPv6 kan anges med hakparenteser eller alternativ syntax: [bind_address/]host/port/hostport.
Som standard binds lyssningssocketen på servern endast till loopback. Detta kan åsidosättas med bind_address. Tom bind_address eller ”*” betyder alla gränssnitt. En explicit fjärr-bind_address lyckas bara om serverns GatewayPorts är aktiverat (se sshd_config(5)).
Om port-argumentet är ”0” allokeras lyssningsport dynamiskt och rapporteras till klienten vid körning.
-S ctl_path
Anger platsen för en kontrollsocket för anslutningsdelning. Se ControlPath och ControlMaster i ssh_config(5).
-s
Kan användas för att begära ett subsystem på fjärrsystemet. Subsystem är en SSH2-funktion som underlättar användning av SSH som säker transport för andra applikationer (t.ex. sftp(1)). Subsystemet anges som fjärrkommando.
-T
Inaktivera pseudo-tty-allokering.
-t
Tvinga pseudo-tty-allokering. Användbart för skärmbaserade program. Flera -t tvingar tty även om ssh saknar lokal tty.
-V
Visa versionsnummer och avsluta.
-v
Utförligt läge. Skriver debugmeddelanden om förloppet. Flera -v ökar utförligheten (max 3).
-W host : port
Begär att standard in och standard ut på klienten vidarebefordras till host:port över den säkra kanalen. Implicerar -N', -T, ExitOnForwardFailure och ClearAllForwardings, och fungerar endast med protokoll version 2.
-w local_tun [ : remote_tun ]
Begär tunnel-enhetsvidarebefordran med angivna tun(4)-enheter mellan klienten (local_tun) och servern (remote_tun).
Enheter kan anges med numeriskt ID eller nyckelordet any (nästa lediga). Om remote_tun inte anges används any. Se även Tunnel och TunnelDevice i ssh_config(5). Om Tunnel inte är satt blir standard tunnel-läge point-to-point.
-X
Aktiverar X11-vidarebefordran. Kan också anges per värd.
X11-vidarebefordran bör användas med försiktighet. Användare som kan kringgå filrättigheter på fjärrvärden (för användarens X-auktorisationsdatabas) kan nå den lokala X11-skärmen via den vidarebefordrade anslutningen. En angripare kan då t.ex. övervaka tangenttryckningar.
Därför begränsas X11-vidarebefordran som standard av X11 SECURITY-tillägget. Se ssh -Y samt ForwardX11Trusted i ssh_config(5).
-x
Inaktiverar X11-vidarebefordran.
-Y
Aktiverar ”betrodd” X11-vidarebefordran. Betrodd X11 påverkas inte av X11 SECURITY-kontroller.
-y
Skicka logginformation via syslog(3). Standard är att skicka till stderr.
ssh kan dessutom hämta konfigurationsdata från en per-användare-konfigurationsfil och en systemomfattande konfigurationsfil. Filformat och alternativ beskrivs i ssh_config(5).
ssh avslutas med returstatus från fjärrkommandot, eller med 255 om ett fel inträffade.
AUTENTISERING
OpenSSH-klienten stöder SSH-protokoll version 1 och 2. Protokoll 2 är standard; ssh faller tillbaka till protokoll 1 om den upptäcker att protokoll 2 inte stöds. Inställningarna kan ändras via Protocol i ssh_config(5), eller tvingas med -1 och -2.
Båda protokollen stöder liknande autentiseringsmetoder, men protokoll 2 föredras eftersom det har fler mekanismer för konfidentialitet (trafiken kan krypteras med t.ex. AES, 3DES, Blowfish, CAST128 eller Arcfour) och integritet (t.ex. hmac-md5, hmac-sha1, umac-64, hmac-ripemd160). Protokoll 1 saknar en stark integritetsmekanism.
Tillgängliga metoder: GSSAPI-baserad autentisering, värdbaserad autentisering, publik nyckel, challenge-response, samt lösenord. Metoderna prövas i den ordningen (protokoll 2 kan ändra standardordningen med PreferredAuthentications).
Värdbaserad autentisering fungerar förenklat så här: Om klientmaskinen finns listad i /etc/hosts.equiv eller /etc/ssh/shosts.equiv på fjärrmaskinen och användarnamnen är samma på båda sidor, eller om ~/.rhosts eller ~/.shosts finns på fjärrmaskinen och innehåller en rad med klientmaskinens namn och användaren på den maskinen, så kan inloggning tillåtas – under förutsättning att servern också kan verifiera klientens värdnyckel (se /etc/ssh/ssh_known_hosts och ~/.ssh/known_hosts). Metoden stänger säkerhetshål relaterade till IP/DNS/routing-spoofing. (Observera: /etc/hosts.equiv, ~/.rhosts och rlogin/rsh-protokoll är i grunden osäkra och bör inaktiveras om man vill ha säkerhet.)
Publik nyckel fungerar så här: Varje användare skapar ett nyckelpar (publik/privat). Servern känner till den publika nyckeln, och endast användaren känner till den privata. ssh implementerar detta automatiskt med RSA eller DSA. Protokoll 1 är begränsat till RSA, protokoll 2 kan använda båda. Filen ~/.ssh/authorized_keys listar publika nycklar som får logga in.
Nycklar skapas med ssh-keygen(1). Den privata nyckeln sparas i ~/.ssh/identity (protokoll 1), ~/.ssh/id_dsa (protokoll 2 DSA) eller ~/.ssh/id_rsa (protokoll 2 RSA). Publika nyckeln sparas i motsvarande .pub-fil. Kopiera sedan den publika nyckeln till ~/.ssh/authorized_keys på fjärrmaskinen. Därefter kan man ofta logga in utan lösenord.
Det bekvämaste sättet att använda nycklar kan vara via en autentiseringsagent; se ssh-agent(1).
Challenge-response innebär att servern skickar ett ”challenge”-textstycke och ber om ett svar. Protokoll 2 tillåter flera utmaningar; protokoll 1 bara en. Exempel: BSD Authentication (se login.conf(5)) och PAM (på vissa system).
Om andra metoder misslyckas frågar ssh efter ett lösenord. Lösenordet skickas för kontroll, men eftersom kommunikationen är krypterad kan det inte ses av någon som lyssnar på nätet.
ssh underhåller och kontrollerar automatiskt en databas över värdar den använts mot. Värdnycklar lagras i ~/.ssh/known_hosts. Dessutom kontrolleras /etc/ssh/ssh_known_hosts. Nya värdar läggs automatiskt till. Om en värds identitet ändras varnar ssh och inaktiverar lösenordsautentisering för att motverka spoofing/”man-in-the-middle”. StrictHostKeyChecking styr inloggningar när värdnyckel är okänd eller ändrad.
När identiteten accepterats kör servern angivet kommando eller ger användaren ett normalt skal. All kommunikation är krypterad.
Om en pseudo-terminal allokerats (normal inloggning) kan användaren använda escape-tecken (se nedan). Om ingen pseudo-tty allokerats är sessionen transparent och kan användas för binär data. Att sätta escape-tecknet till none gör sessionen transparent även med tty.
Sessionen avslutas när fjärrkommando/skalet avslutas och alla X11- och TCP-anslutningar har stängts.
ESCAPE-TECKEN
När en pseudo-terminal begärts stödjer ssh flera funktioner via ett escape-tecken.
Ett enda tilde-tecken kan skickas som ~~ eller genom att följa tilde med ett annat tecken än de som beskrivs nedan. Escape-tecknet måste alltid följa en newline för att tolkas som special. Escape-tecknet kan ändras med EscapeChar i konfigurationsfilen eller via -e.
Stödda escapes (med standard ”~”):
~. Koppla från. ~^Z Lägg ssh i bakgrunden. ~# Lista vidarebefordrade anslutningar. ~& Lägg ssh i bakgrunden vid utloggning när ssh väntar på att vidarebefordrade anslutningar/X11-sessioner ska avslutas. ~? Visa lista över escape-tecken. ~B Skicka BREAK till fjärrsystemet (endast protokoll 2 om motparten stöder det). ~C Öppna kommandorad (lägga till/cancel portvidarebefordran, m.m.). ~R Begär omnyckling (rekey) av anslutningen (endast protokoll 2 om motparten stöder det).
TCP-VIDAREBEFORDRAN
Vidarebefordran av godtyckliga TCP-anslutningar över den säkra kanalen kan anges på kommandoraden eller i en konfigurationsfil. Ett exempel är en säker anslutning till en e‑postserver; ett annat är att passera brandväggar.
Exempel: tunnla en IRC-session från klienten 127.0.0.1 (localhost) till fjärrservern server.example.com:
$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10 $ irc -c '#users' -p 1234 pinky 127.0.0.1
Detta tunnlar en anslutning till IRC-servern, går in i kanalen #users, smeknamn pinky, via port 1234. Porten spelar ingen roll så länge den är >1023 och inte krockar med andra portar. Anslutningen vidarebefordras till port 6667 på fjärrservern (standard för IRC). -f lägger ssh i bakgrunden och fjärrkommandot sleep 10 ger tid att starta tjänsten. Om inga anslutningar sker inom tidsgränsen avslutar ssh.
X11-VIDAREBEFORDRAN
Om ForwardX11 är yes (eller via -X', -x, -Y) och användaren använder X11 (DISPLAY är satt), vidarebefordras X11-anslutningen till fjärrsidan så att program som startas på fjärrskalet går via den krypterade kanalen. Användaren ska normalt inte sätta DISPLAY manuellt.
DISPLAY-värdet som sätts av ssh pekar på servermaskinen men med ett displaynummer större än noll; detta är normalt och beror på att ssh skapar en ”proxy”-X-server på servern. ssh sätter också upp Xauthority-data genom att skapa en slumpmässig cookie och verifiera vidarebefordrade anslutningar; den riktiga cookien skickas aldrig i klartext.
Om ForwardAgent är yes (eller via -A/-a) och användaren använder en agent, vidarebefordras agentanslutningen till fjärrsidan.
VERIFIERA VÄRDNYCKLAR
När man ansluter till en server första gången visas ett fingeravtryck av serverns publika nyckel (om inte StrictHostKeyChecking är avstängt). Fingeravtryck kan tas fram med ssh-keygen(1), t.ex.:
$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
Det finns även stöd för visuell jämförelse av värdnycklar via ”random art”. Sätt VisualHostKey till yes för att få en liten ASCII-grafik vid varje inloggning. Mönstret är inte unikt, men ger en sannolikhetsindikator.
För att lista fingeravtryck och random art för alla kända värdar:
$ ssh-keygen -lv -f ~/.ssh/known_hosts
Alternativt kan SSHFP-poster i DNS användas för att verifiera fingeravtryck (se VerifyHostKeyDNS i ssh_config(5)). Exempel på generering:
$ ssh-keygen -r host.example.com.
Kontrollera zonen:
$ dig -t SSHFP host.example.com
Anslut med fråga:
$ ssh -o "VerifyHostKeyDNS ask" host.example.com
SSH-BASERADE VPN
ssh kan tunnla VPN-trafik via tun(4). Serverns PermitTunnel i sshd_config(5) styr om och på vilken nivå (lager 2 eller 3) detta stöds.
Exempel: koppla klientnätet 10.0.50.0/24 med fjärrnätet 10.0.99.0/24 via en punkt-till-punkt-länk (förutsatt att SSH-servern på gateway 192.168.1.15 tillåter det).
På klienten:
# ssh -f -w 0:1 192.168.1.15 true # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252 # route add 10.0.99.0/24 10.1.1.2
På servern:
# ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 # route add 10.0.50.0/24 10.1.1.1
Klientåtkomst kan finjusteras via /root/.ssh/authorized_keys och serverns PermitRootLogin. Exempel (för ”forced-commands-only”):
tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john
Eftersom SSH-baserad VPN har en del overhead passar den ofta bättre för temporära upplägg (t.ex. trådlösa VPN). Mer permanenta VPN-lösningar kan göras med verktyg som ipsecctl(8) och isakmpd(8).
MILJÖ
ssh sätter normalt följande miljövariabler:
DISPLAY
Anger platsen för X11-servern. Sätts automatiskt av ssh till formen hostname:n där hostname är värden där skalet kör och n är ett heltal ≥ 1. Detta specialvärde används för X11-vidarebefordran. Användaren bör normalt inte sätta DISPLAY manuellt, eftersom det gör X11-anslutningen osäker och kräver manuell hantering av auktorisationscookies.
HOME
Sätts till sökvägen för användarens hemkatalog.
LOGNAME
Synonym för USER; för kompatibilitet.
Sätts till sökvägen för användarens brevlåda.
PATH
Sätts till standard-PATH enligt kompilering av ssh.
SSH_ASKPASS
Om ssh behöver en lösenfras läser den från terminalen om den körs i terminal. Om ingen terminal finns men DISPLAY och SSH_ASKPASS är satta, körs programmet i SSH_ASKPASS och ett X11-fönster används för inmatning. Detta är användbart t.ex. från .xsession. (Ibland behöver stdin omdirigeras från /dev/null.)
SSH_AUTH_SOCK
Anger sökvägen till en UNIX-domänsocket för agentkommunikation.
SSH_CONNECTION
Fyra mellanslagsseparerade värden: klient-IP, klientport, server-IP, serverport.
SSH_ORIGINAL_COMMAND
Innehåller ursprunglig kommandorad när ett ”forced command” körs.
SSH_TTY
Namnet på tty-enheten associerad med aktuellt skal/kommando (inte satt om ingen tty).
TZ
Anger aktuell tidszon om den var satt när demonen startades (värdet förs vidare till nya anslutningar).
USER
Namnet på användaren som loggar in.
Dessutom läser ssh ~/.ssh/environment och lägger till rader av formen VARNAME=value om filen finns och om användare tillåts ändra sin miljö. Se PermitUserEnvironment i sshd_config(5).
SSH_USE_STRONG_RNG
Normalt omseedas OpenSSL:s slumptalsgenerator från /dev/urandom. Om miljövariabeln är satt till annat än 0 omseedas den från /dev/random. Antalet byte definieras av värdet (minst 6). Detta rekommenderas inte på datorer utan hårdvarubaserad slumpgenerator eftersom otillräcklig entropi kan blockera anslutningen tills entropi finns.
FILER
~/.rhosts
Används för värdbaserad autentisering. På vissa system kan den behöva vara världsläsbar om hemkatalogen ligger på NFS, eftersom sshd(8) läser den som root. Filen måste ägas av användaren och får inte vara skrivbar för andra. Rekommenderad behörighet: läs/skriv för användaren, inte åtkomlig för andra.
~/.shosts
Används som .rhosts men tillåter värdbaserad autentisering utan att tillåta rlogin/rsh.
~/.ssh/
Standardkatalog för användarspecifik konfiguration och autentiseringsinformation. Inget generellt krav att allt hålls hemligt, men rekommenderade rättigheter: läs/skriv/utför för användaren, ej åtkomlig för andra.
~/.ssh/authorized_keys
Lista över publika nycklar (RSA/DSA) som får logga in som användaren. Format beskrivs i sshd(8). Inte särskilt känslig, men rekommenderad behörighet: läs/skriv för användaren, ej åtkomlig för andra.
~/.ssh/config
Per-användare-konfigurationsfil. På grund av missbrukspotential måste filen ha strikta rättigheter: läs/skriv för användaren, ej åtkomlig för andra.
~/.ssh/environment
Extra definitioner av miljövariabler; se MILJÖ ovan.
~/.ssh/identity, ~/.ssh/id_dsa, ~/.ssh/id_rsa
Privata nycklar. Känsliga data: ska vara läsbara av användaren men ej åtkomliga för andra (läs/skriv). ssh ignorerar en privat nyckelfil som är åtkomlig för andra. Nyckeln kan krypteras med en lösenfras (3DES).
~/.ssh/identity.pub, ~/.ssh/id_dsa.pub, ~/.ssh/id_rsa.pub
Publika nycklar. Inte känsliga; kan vara läsbara för alla.
~/.ssh/known_hosts
Lista över värdnycklar för värdar som användaren loggat in på och som inte redan finns i systemlistan. Se sshd(8) för format.
~/.ssh/rc
Kommandon körs av ssh vid inloggning, precis före användarens skal (eller kommando) startas. Se sshd(8).
/etc/hosts.equiv
För värdbaserad autentisering. Ska endast vara skrivbar av root.
/etc/ssh/shosts.equiv
Som hosts.equiv, men utan att tillåta rlogin/rsh.
/etc/ssh/ssh_config
Systemomfattande konfigurationsfil. Se ssh_config(5).
/etc/ssh/ssh_host_key, /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_rsa_key
Innehåller privata delar av värdnycklar. För protokoll 1 måste ssh vara setuid root eftersom värdnyckeln är läsbar endast för root. För protokoll 2 används ssh-keysign(8) för åtkomst, vilket eliminerar kravet att ssh är setuid root vid värdbaserad autentisering. Som standard är ssh inte setuid root.
/etc/ssh/ssh_known_hosts
Systemomfattande lista över kända värdnycklar. Ska vara förberedd av administratören och vara världsläsbar. Se sshd(8).
/etc/ssh/sshrc
Kommandon körs vid inloggning, precis före skal/kommando. Se sshd(8).
IPV6
IPv6-adresser kan användas överallt där IPv4-adresser används. I alla poster måste IPv6-adressen vara innesluten i hakparenteser. Obs: hakparenteser är metatecken för skalet och måste escap:as i skal.
SE ÄVEN
scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), tun(4), hosts.equiv(5), ssh_config(5), ssh-keysign(8), sshd(8)
RFC: 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4335, 4344, 4345, 4419, 4716.
FÖRFATTARE
OpenSSH är en vidareutveckling av den ursprungliga fria ssh 1.2.12-utgåvan av Tatu Ylönen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt och Dug Song åtgärdade många buggar, återinförde nya funktioner och skapade OpenSSH. Markus Friedl bidrog med stöd för SSH-protokollversionerna 1.5 och 2.0.