SSH: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(45 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
−
==Clientseite==
+
= '''S'''ecure '''SH'''ell =
−
ssh (OpenSSH client) ist ein Programm um auf einen entfernten Rechner zuzugreifen und dort Kommandos auszuführen. Es ersetzt
 
−
die Programme rlogin und rsh und stellt eine sichere verschlüsselte Verbindung zwischen zwei Rechnern durch ein
 
−
(unsicheres) Netz her.
 
  
−
ssh verbindet sich mit dem Zielrechner, worauf der Benutzer seine Identität über verschiedene Methoden nachweisen muss.
+
* Das [[SSH-Protokoll]] stellt eine sichere Verbindung zu einem entfernten Rechner her
 +
* Dies gelingt durch die Verschlüsselung der Datenpakete
 +
* Der Weg durch das Netz darf dabei unsicher sein
 +
* Standardmäßig lauscht SSH auf Port 22
 +
* '''ssh [Optionen] Benutzer@Zielrechner [Kommando]'''
  
−
ssh [Optionen] Benutzer@Zielrechner [Kommando]
+
= Oft gebrauchte Optionen =
  
−
Wenn ein Kommando angegeben wird, wird dieses anstelle der Login-Shell ausgeführt.
+
* '''-p''' ''port_nummer'': gibt einen alternativen Port an
 +
* '''-i''' ''/pfad/zum/privaten/schlüssel'': gibt einen alternativen privaten Schlüssel zur Authentifizierung an
 +
* '''-J''' ''benutzer@jumphost'': gibt einen Proxy-Rechner an, von dem man zum Ziel Rechner springt
 +
* '''-X''': Erlaubt X11 Forwarding, um grafische Programme lokal auszuführen
 +
* '''-Y''': Erlaubt X11 Forwarding, unabhängig von lokalen Sicherheitseinstellungen
  
−
===Optionen===
+
= '''S'''ecure '''S'''hell '''C'''opy =
−
* -1 : Erzwingt die ausschließliche Benutzung von ssh Protokollversion 1
 
−
* -2 : Erzwingt die ausschließliche Benutzung von ssh Protokollversion 2
 
−
* -4 : Erzwingt die ausschließliche Benutzung von IPv4 Adressen
 
−
* -6 : Erzwingt die ausschließliche Benutzung von IPv6 Adressen
 
−
* -b ''Quelladresse'' : Benutzt die ''Quelladresse'' als Ursprung für die Verbindung. Nur nützlich bei Systemen mit
 
−
mehreren (IP-)Adressen
 
−
* -C : Aktiviert Kompression falls möglich. Dies ist für langsame Verbindungen (z.B. über 56k Modem) gedacht und
 
−
würde schnelle Netzwerke verlangsamen
 
−
* -l ''Benutzer'' : Gibt ''Benutzer'' an, alternativ zu ''Benutzer''@Zielrechner
 
−
* -p ''port'' : Gibt Zielport an
 
−
* -V : Zeigt die Versionsnummer an
 
−
* -v : ausführliche Ausgabe
 
−
* -X : Erlaubt X11 forwarding, damit können entfernte Programme mit grafischen Benutzerinterface (GUI) lokal angezeigt werden
 
−
* -x : Verbietet X11 forwarding
 
  
−
Beispiele
+
* Ermöglicht das Kopieren von Dateien auf einen entfernten Rechner
 +
* Baut auf die Authentifizierung und Verschlüsselung von SSH auf
  
−
Zugriff auf einen bisher unbekannten Zielrechner
+
= Konfiguration =
−
root@zero:~# ssh root@alita
 
−
The authenticity of host 'alita (192.168.242.10)' can't be established.
 
−
RSA key fingerprint is 8c:d1:1f:d2:5e:76:cd:75:74:c4:b7:b2:c7:f6:50:78.
 
−
Are you sure you want to continue connecting (yes/no)? yes
 
−
Warning: Permanently added 'alita,192.168.242.10' (RSA) to the list of known hosts.
 
−
root@alita's password: Passwort_das_nicht_angezeigt_wird
 
−
...
 
−
root@alita:~#
 
−
Um die Identität des Zielrechners zu verifizieren, kann man den den Fingerprint des öffentlichen RSA Schlüssels
 
−
auf der Serverseite ausgeben lassen. Dieser kann dann mit dem oben angezeigten verglichen werden.
 
  
−
Zugriff auf bekannten Zielrechner
+
== SSH-Schlüssel mit Passwort generieren ==
−
root@zero:~# ssh alita
 
−
root@alita's password: Passwort_das_nicht_angezeigt_wird
 
−
...
 
−
root@alita:~#
 
  
−
Zugriff als Benutzer christian und auf Port 9998
+
* Man sollte Passwort-Authentifikation vermeiden soweit es geht
−
root@zero:~# ssh alita -l christian -p 9998
+
* Bei SSH kann man stattdessen mit Schlüsselpaaren arbeiten, die wie folgt generiert werden
−
christian@alita's password: Passwort_das_nicht_angezeigt_wird
+
* '''ssh-keygen'''
−
...
+
* bzw. für einen ed25519-Schlüssel
−
christian@alita:~$
+
* '''ssh-keygen -t ed25519'''
 +
* Den privaten Schlüssel sollte man mit einer Passphrase verschlüsseln für erhöhte Sicherheit
 +
* Danach sollten folgende Dateien da sein
 +
* '''ls ~/.ssh'''
  
−
Ausführen eines Kommandos auf dem Zielrechner
+
  id_rsa id_rsa.pub
−
  root@zero:~# ssh alita cat /etc/hostname
 
−
root@alita's password:
 
−
alita
 
−
root@zero:~#
 
  
−
Ausführen eines grafischen Programms auf dem Zielrechner und lokal anzeigen
+
* Um den öffentlichen Schlüssel auf dem SSH-Server abzulegen kann man einen der folgenden Befehle verwenden:
−
root@zero:~# ssh -X root@alita kate
+
* '''ssh-copy-id ''user''@''ip.oder.host.name''
 +
* bzw. diesen Befehl falls der Ordner ''.ssh'' schon im Homeverzeichnis vom Benutzer existiert, aber noch keine ''authorized_keys''-Datei da ist:
 +
* '''scp ~/.ssh/id_rsa.pub ''user''@''ip.oder.host.name'':~/.ssh/authorized_keys
 +
* Nun sollte nicht mehr das Passwort des remoten Benutzers abgefragt werden
 +
* Damit man nicht jedes mal den privaten Schlüssel entsperren muss, sollte man sich einen [[SSH Agent]] konfigurieren
 +
* Um die Administration der Firewall einfacher zu machen kann man sich auch den öffentlichen Schlüssel zum ''root''-User kopieren
 +
* '''su -'''
 +
* '''mkdir .ssh'''
 +
* '''cp ~''user''/.ssh/authorized_keys ~/.ssh'''
  
−
[[Image:kate.jpg]]
+
* Die Benutzerkonfiguration für SSH liegt unter ''~/.ssh/config''
 +
* In ''~/.ssh/authorized_keys'' stehen öffentliche Schlüssel, die sich passwortlos authentifizieren dürfen
  
−
===Authentifizierung mit Schlüssel===
+
== Jump Host eintragen ==
−
====Schlüsselpaar erstellen====
 
−
xinux@zero:~$ ssh-keygen
 
−
Generating public/private rsa key pair.
 
−
Enter file in which to save the key (/home/xinux/.ssh/id_rsa):
 
−
Enter passphrase (empty for no passphrase):
 
−
Enter same passphrase again:
 
−
Your identification has been saved in /home/xinux/.ssh/id_rsa.
 
−
Your public key has been saved in /home/xinux/.ssh/id_rsa.pub.
 
−
The key fingerprint is:
 
−
a7:13:ec:54:a3:4f:29:32:f8:98:04:ea:0c:b9:62:04 xinux@zero
 
−
The key's randomart image is:
 
−
+--[ RSA 2048]----+
 
−
|                |
 
−
|                |
 
−
|E .      o      |
 
−
|.o . . . o o    |
 
−
|+.  o o S +      |
 
−
|=. . + = B      |
 
−
|o+  o . + .      |
 
−
|o        .      |
 
−
|                |
 
−
+-----------------+
 
−
xinux@zero:~$
 
  
−
====Übertragen des öffentlichen Schlüssels====
+
* Damit man nicht jedesmal den langen Befehlt tippen muss, um einen JumpProxy zu benutzen, kann man einen Alias setzen
−
xinux@zero:~$ ssh-copy-id -i .ssh/'''id_rsa.pub''' root@alita
+
* '''vim ~/.ssh/config'''
−
root@alita's password: Passwort_das_nicht_angezeigt_wird
 
−
Now try logging into the machine, with "ssh 'root@alita'", and check in:
 
−
 
−
  .ssh/authorized_keys
 
−
 
−
to make sure we haven't added extra keys that you weren't expecting.
 
−
 
−
xinux@zero:~$
 
  
−
====Einloggen auf Remoterechner====
+
  Host ''Alias''
−
root@zero:~# ssh root@alita
+
  User ''Benutzername''
−
Linux alita 2.6.28-13-generic #44-Ubuntu SMP Tue Jun 2 07:57:31 UTC 2009 i686
+
  Hostname ''Name/IP des Ziels''
−
   
+
  ProxyJump ''Name/IP des Proxys''
−
The programs included with the Ubuntu system are free software;
 
−
the exact distribution terms for each program are described in the
 
−
individual files in /usr/share/doc/*/copyright.
 
−
 
−
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
 
−
applicable law.
 
−
 
−
To access official Ubuntu documentation, please visit:
 
−
http://help.ubuntu.com/  
 
−
 
−
0 packages can be updated.
 
−
0 updates are security updates.
 
−
 
−
Last login: Thu Jul  2 13:54:13 2009 from zero.alpha.quadrant
 
−
root@alita:~#
 
  
 +
* '''ssh ''Alias'''''
  
−
===scp secure copy===
+
== Alternativen privaten Schlüssel benutzen ==
−
scp steht für Secure Copy und ermöglicht es, Dateien in einem Netzwerk zu kopieren. Es baut auf ssh auf und benutzt
 
−
entsprechend Authentifizierung und Verschlüsselung.
 
  
−
scp [Optionen] Benutzer@Rechner1:/Pfad/zu/Datei lokaler_Dateipfad
+
* Falls man mehrere private Schlüssel hat kann man so seinen Default-Schlüssel wählen
−
scp [Optionen] lokaler Dateipfad Benutzer@Rechner2:/Pfad/zu/Datei2
+
* '''vim ~/.ssh/config'''
  
−
====Optionen====
+
IdentityFile ''/pfad/zum/privaten/schlüssel''
−
* -1 : Erzwingt die ausschließliche Benutzung von ssh Protokollversion 1
 
−
* -2 : Erzwingt die ausschließliche Benutzung von ssh Protokollversion 2
 
−
* -4 : Erzwingt die ausschließliche Benutzung von IPv4 Adressen
 
−
* -6 : Erzwingt die ausschließliche Benutzung von IPv6 Adressen
 
−
* -C : Benutzt Komprimierung
 
−
* -P port: Benutzt Port auf dem Zielrechner; Achtung: großes P!
 
−
* -p : Verändert nicht die Zeiten der letzten Veränderung der Datei
 
−
* -r : rekursives Kopieren; scp folgt dabei auch symbolischen Links
 
−
* -v : ausführliche Ausgabe
 
  
 +
= Hostkey entfernen =
 +
* Falls der Server seinen Hostkey ändert, warnt der SSH-Client vor einer potentiellen [[MITM-Attacke]]
 +
* Wenn man sich sicher ist, dass dies nicht der Fall ist, kann man den alten Hostkey entfernen und den neuen akzeptieren
 +
* Standardmäßig befinden sich diese unter ''~/.ssh/known_hosts''
 +
* Automatisch kann man das folgendermaßen erreichen:
 +
* '''ssh-kegen -R ''host'' '''
 +
# Host x.x.x.x found: line 364
 +
# Host x.x.x.x found: line 365
 +
# Host x.x.x.x found: line 366
 +
/home/xinux/.ssh/known_hosts updated.
 +
Original contents retained as /home/xinux/.ssh/known_hosts.old
  
−
Beispiele
+
[[Kategorie:SSH]]
−
 
 
−
Kopieren aller Dateien und Verzeinissen von einem lokalen Verzeichnis in ein entferntes Verzeichnis
 
−
root@zero:~# scp -r /etc/* root@alita:/tmp/
 
−
root@alita's password:
 
−
powerbtn.sh                                100%  517    0.5KB/s  00:00
 
−
...
 
−
 
 
−
Kopieren eines entfernten Verzeichnisses in ein lokales Verzeichnis
 
−
root@zero:~# scp -r root@alita:/root /root/alita_backup/
 
−
root@alita's password:   
 
−
.bashrc                                      100% 2227    2.2KB/s  00:00 
 
−
...
 
−
 
 
−
==Serverseite==
 
−
===SSH Server installieren===
 
−
root@alita:~# apt-get install openssh-server
 
−
...
 
−
 
−
====Konfigurationsdatei====
 
−
/etc/ssh/sshd_config
 
−
# What ports, IPs and protocols we listen for
 
−
Port 22 
 
−
                           
 
−
# Use these options to restrict which interfaces/protocols sshd will bind to
 
−
#ListenAddress ::                                                         
 
−
#ListenAddress 0.0.0.0                                                     
 
−
Protocol 2                                                                 
 
−
# HostKeys for protocol version 2                                         
 
−
HostKey /etc/ssh/ssh_host_rsa_key                                         
 
−
HostKey /etc/ssh/ssh_host_dsa_key                                         
 
−
#Privilege Separation is turned on for security                           
 
−
UsePrivilegeSeparation yes                                                 
 
−
 
−
# Lifetime and size of ephemeral version 1 server key
 
−
KeyRegenerationInterval 3600                       
 
−
ServerKeyBits 768                                   
 
−
...
 
−
 
 
−
Zusätzlichen Port zum Lauschen auf Anfragen hinzufügen
 
−
 
 
−
/etc/ssh/sshd_config
 
−
# What ports, IPs and protocols we listen for
 
−
Port 22 
 
−
'''Port 9998'''                           
 
−
# Use these options to restrict which interfaces/protocols sshd will bind to
 
−
#ListenAddress ::                                                         
 
−
#ListenAddress 0.0.0.0
 
−
 
 
−
===RSA Key Fingerprint anzeigen===
 
−
root@alita:/etc/ssh# ssh-keygen -f /etc/ssh/ssh_host_rsa_key.pub -l
 
−
2048 8c:d1:1f:d2:5e:76:cd:75:74:c4:b7:b2:c7:f6:50:78 /etc/ssh/ssh_host_rsa_key.pub (RSA)
 
−
= Port Forwarding =
 
−
-f  lässt den Prozess im Hintergrund laufen
 
−
-g  erlaubt remoteusern den lokal geöffneten ssh tunnel zu benutzen
 
−
-p  gibt den Port an über den sich SSH verbinden soll
 
−
-N  ist eine nützliche Option um das öffnen einer remoteshell zu unterbinden
 
−
 
 
−
-R  leitet den Port vom remoteserver auf localhost weiter
 
−
-L  leitet den Port von localhost auf remoteserver weiter
 
−
    Format [bind_address:]port:host:hostport
 
−
    Wenn keine [bind_address:] angegeben wird localhost eingesetzt
 
−
 
−
 
 
−
Beispiele:
 
−
 
 
−
*Umleiten von Jdownloader Linkgrabber von alice aus
 
−
**bob port 9666 ---> alice port 9666
 
−
root@alice:~# ssh -f -N ''SSHSERVER'' -R localhost:9666:localhost:9666
 
−
*Umleiten von VNC von bob aus
 
−
**bob port 5900 ---> donald port 5900
 
−
root@bob:~# ssh -f -N donald -L 5900:localhost:5900
 
−
*Umleiten von Samba von charlie aus
 
−
**donald port 139 ---> charlie port 139
 
−
ssh -p 9387 -f -g -N ''SSHSERVER'' -L 139:''ZIEL'':139
 
−
 
 
−
ssh -p 7022 -f -g -N  -l ''USER'' ''SSHSERVER'' -L ''LOCALPORT'':''ZIEL'':''ZIELPORT''
 
−
 
 
−
Ports schliessen:
 
−
fuser -vk -n tcp 139
 

Aktuelle Version vom 19. August 2024, 12:57 Uhr

Secure SHell

  • Das SSH-Protokoll stellt eine sichere Verbindung zu einem entfernten Rechner her
  • Dies gelingt durch die Verschlüsselung der Datenpakete
  • Der Weg durch das Netz darf dabei unsicher sein
  • Standardmäßig lauscht SSH auf Port 22
  • ssh [Optionen] Benutzer@Zielrechner [Kommando]

Oft gebrauchte Optionen

  • -p port_nummer: gibt einen alternativen Port an
  • -i /pfad/zum/privaten/schlüssel: gibt einen alternativen privaten Schlüssel zur Authentifizierung an
  • -J benutzer@jumphost: gibt einen Proxy-Rechner an, von dem man zum Ziel Rechner springt
  • -X: Erlaubt X11 Forwarding, um grafische Programme lokal auszuführen
  • -Y: Erlaubt X11 Forwarding, unabhängig von lokalen Sicherheitseinstellungen

Secure Shell Copy

  • Ermöglicht das Kopieren von Dateien auf einen entfernten Rechner
  • Baut auf die Authentifizierung und Verschlüsselung von SSH auf

Konfiguration

SSH-Schlüssel mit Passwort generieren

  • Man sollte Passwort-Authentifikation vermeiden soweit es geht
  • Bei SSH kann man stattdessen mit Schlüsselpaaren arbeiten, die wie folgt generiert werden
  • ssh-keygen
  • bzw. für einen ed25519-Schlüssel
  • ssh-keygen -t ed25519
  • Den privaten Schlüssel sollte man mit einer Passphrase verschlüsseln für erhöhte Sicherheit
  • Danach sollten folgende Dateien da sein
  • ls ~/.ssh
id_rsa id_rsa.pub
  • Um den öffentlichen Schlüssel auf dem SSH-Server abzulegen kann man einen der folgenden Befehle verwenden:
  • ssh-copy-id user@ip.oder.host.name
  • bzw. diesen Befehl falls der Ordner .ssh schon im Homeverzeichnis vom Benutzer existiert, aber noch keine authorized_keys-Datei da ist:
  • scp ~/.ssh/id_rsa.pub user@ip.oder.host.name:~/.ssh/authorized_keys
  • Nun sollte nicht mehr das Passwort des remoten Benutzers abgefragt werden
  • Damit man nicht jedes mal den privaten Schlüssel entsperren muss, sollte man sich einen SSH Agent konfigurieren
  • Um die Administration der Firewall einfacher zu machen kann man sich auch den öffentlichen Schlüssel zum root-User kopieren
  • su -
  • mkdir .ssh
  • cp ~user/.ssh/authorized_keys ~/.ssh
  • Die Benutzerkonfiguration für SSH liegt unter ~/.ssh/config
  • In ~/.ssh/authorized_keys stehen öffentliche Schlüssel, die sich passwortlos authentifizieren dürfen

Jump Host eintragen

  • Damit man nicht jedesmal den langen Befehlt tippen muss, um einen JumpProxy zu benutzen, kann man einen Alias setzen
  • vim ~/.ssh/config
Host Alias
 User Benutzername
 Hostname Name/IP des Ziels
 ProxyJump Name/IP des Proxys
  • ssh Alias

Alternativen privaten Schlüssel benutzen

  • Falls man mehrere private Schlüssel hat kann man so seinen Default-Schlüssel wählen
  • vim ~/.ssh/config
IdentityFile /pfad/zum/privaten/schlüssel

Hostkey entfernen

  • Falls der Server seinen Hostkey ändert, warnt der SSH-Client vor einer potentiellen MITM-Attacke
  • Wenn man sich sicher ist, dass dies nicht der Fall ist, kann man den alten Hostkey entfernen und den neuen akzeptieren
  • Standardmäßig befinden sich diese unter ~/.ssh/known_hosts
  • Automatisch kann man das folgendermaßen erreichen:
  • ssh-kegen -R host
# Host x.x.x.x found: line 364
# Host x.x.x.x found: line 365
# Host x.x.x.x found: line 366
/home/xinux/.ssh/known_hosts updated.
Original contents retained as /home/xinux/.ssh/known_hosts.old