Ssh howto: Unterschied zwischen den Versionen
Zeile 17: | Zeile 17: | ||
*Zuerst wird ein TCP-Verbindung (Port 22) aufgebaut | *Zuerst wird ein TCP-Verbindung (Port 22) aufgebaut | ||
*Danach schickt der Server seine Protokollversion und die verfügbaren Protokolle | *Danach schickt der Server seine Protokollversion und die verfügbaren Protokolle | ||
− | *Der Client antwortet ebenfalls mit dem Senden seiner unterstützten Version und das | + | *Der Client antwortet ebenfalls mit dem Senden seiner unterstützten Version und das gewählte Protokoll. Er verlangt auch den öffentlichen Schlüssel des Servers |
− | gewählte Protokoll. Er verlangt auch den öffentlichen Schlüssel des Servers | ||
*Der Server schickt seinen öffentlichen Schlüssel | *Der Server schickt seinen öffentlichen Schlüssel | ||
− | *Der Client generiert einen Session Key und verschlüsselt ihn mit dem | + | *Der Client generiert einen Session Key und verschlüsselt ihn mit dem öffentliche des Servers |
− | + | *Der Server entschlüsselt den Session Key mit seinem privaten Schlüssel und ab jetzt werden alle Daten, die zwischen Server und Client ausgetauscht werden, mit einem symmetrischen Verfahren (Session Key) verschlüsselt. | |
− | *Der Server entschlüsselt den Session Key mit seinem privaten Schlüssel und ab jetzt | + | |
− | werden alle Daten, die zwischen Server und Client ausgetauscht werden, mit einem | ||
− | symmetrischen Verfahren (Session Key) verschlüsselt. | ||
===Ablauf einer Authentifizierung (RSA-Verfahren, grüne Pfeile)=== | ===Ablauf einer Authentifizierung (RSA-Verfahren, grüne Pfeile)=== | ||
*Client sendet eine Verbindungsaufbauanfrage (Login-Anfrage) am Server | *Client sendet eine Verbindungsaufbauanfrage (Login-Anfrage) am Server |
Version vom 16. November 2019, 10:38 Uhr
ssh verhindert
- DNS Spoofing
- IP Spoofing
- IP Source Routing
- Ausspähen von Klartextkennwörtern und Nutzdaten
- Manipulation von übertragenen Daten
- Angriffe auf den X11-Server
ssh ersetzt
- telnet
- rlogin
scp/sftp ersetzt
- ftp
- rcopy
Verbindungsaufbau vereinfacht
Ablauf der Verbindungsaufbau (Kombiniertes Verfahren, rote Pfeile)
- Zuerst wird ein TCP-Verbindung (Port 22) aufgebaut
- Danach schickt der Server seine Protokollversion und die verfügbaren Protokolle
- Der Client antwortet ebenfalls mit dem Senden seiner unterstützten Version und das gewählte Protokoll. Er verlangt auch den öffentlichen Schlüssel des Servers
- Der Server schickt seinen öffentlichen Schlüssel
- Der Client generiert einen Session Key und verschlüsselt ihn mit dem öffentliche des Servers
- Der Server entschlüsselt den Session Key mit seinem privaten Schlüssel und ab jetzt werden alle Daten, die zwischen Server und Client ausgetauscht werden, mit einem symmetrischen Verfahren (Session Key) verschlüsselt.
Ablauf einer Authentifizierung (RSA-Verfahren, grüne Pfeile)
- Client sendet eine Verbindungsaufbauanfrage (Login-Anfrage) am Server
- Der Server erhält diese Anfrage und antwortet mit einer „Challenge“: Ein Zufallswert
wird generiert und mit dem öffentlichen Schlüssel des Benutzers (Client) verschlüsselt.
- Der Client entschlüsselt diesen Zufallswert mit seinem privaten Schlüssel und bildet
den dazugehörigen Hashwert. Dieser Hashwert wird mit dem privaten Schlüssel verschlüsselt und dem Server geschickt.
- Der Server entschlüsselt den empfangenen Hashwert mit dem öffentlichen Schlüssel
des Benutzers und konfrontiert seinen generierten Hashwert mit dem vom Client.
- Wenn beide Hashwerte übereinstimmen, wird der Zugriff auf dem Server
zugelassen.
Clientseite
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.
ssh [Optionen] Benutzer@Zielrechner [Kommando]
Wenn ein Kommando angegeben wird, wird dieses anstelle der Login-Shell ausgeführt.
Optionen
- -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
Zugriff auf einen bisher unbekannten Zielrechner
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
root@zero:~# ssh alita root@alita's password: Passwort_das_nicht_angezeigt_wird ... root@alita:~#
Zugriff als Benutzer christian und auf Port 9998
root@zero:~# ssh alita -l christian -p 9998 christian@alita's password: Passwort_das_nicht_angezeigt_wird ... christian@alita:~$
Ausführen eines Kommandos auf dem Zielrechner
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
root@zero:~# ssh -X root@alita kate
Authentifizierung mit Schlüssel
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
Ubuntu
xinux@zero:~$ ssh-copy-id -i .ssh/id_rsa.pub root@alita 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:~$
ESXI
xinux@zero:~$ cat .ssh/id_rsa.pub | ssh root@esxi \ 'cat >> /etc/ssh/keys-root/authorized_keys'
Einloggen auf Remoterechner
root@zero:~# ssh root@alita Linux alita 2.6.28-13-generic #44-Ubuntu SMP Tue Jun 2 07:57:31 UTC 2009 i686 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:~#
scp secure copy
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 scp [Optionen] lokaler Dateipfad Benutzer@Rechner2:/Pfad/zu/Datei2
Optionen
- -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
Beispiele
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)
SSH Tunnel (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
ssh -p SERVERPORT -f -g -N -l USER SSHSERVER -L BINDADDRESS:LOCALPORT:ZIEL:ZIELPORT
Alles was auf BINDADDRESS port LOCALPORT ankommt schicke durch tunnel zu ZIEL port ZIELPORT
Beispiele:
- Umleiten von Jdownloader Linkgrabber von alice aus
- bob port 9666 ---> alice port 9666
root@alice:~# ssh -f -N bob -R localhost:9666:localhost:9666
- Umleiten von Jdownloader von bob aus
- alice port 9666 ---> bob port 9666
root@bob:~# ssh -f -N alice -l root -L 9666:localhost:9666
- Umleiten von Samba von charlie aus
- donald port 139 ---> charlie port 139
ssh -p 9387 -f -g -N SSHSERVER -L 139:ZIEL:139
- Umleiten vom Remote Host noezel auf localhost
ssh -f -N noezel -l root -R 88:localhost:22
Beispiel-Script:
Der Kunde muss dieses Script ausführen (vorher downloaden), sodass wir Zugang haben ohne die Firewall zu bearbeiten.
Dieses script öffnet einen Tunnel auf gaius zu dem Kundenrechner.
#!/bin/bash #Da gibt der Kunde den zu nutzenden User ein read -p "user:" U #Tunnel wird bei Gaius geöffnet (-R) und führt zu localhost (Rechner von Kunde) über Port 8080 (frei wählbar) ssh -gv $U@gaius.tuxmen.de -R localhost:8080:localhost:22
->> Nun haben wir Zugriff indem wir ssh auf gaius mit dem angegeben Port aufbauen
Ports schliessen:
fuser -vk -n tcp 139
ssh link
Firefox 3.5 and above
(Works without installed Gnome libraries) Type about:config into the Location Bar (address bar) and press Enter. Right-click -> New -> Boolean -> Name: network.protocol-handler.expose.foo -> Value -> false (Replace foo with the protocol you're specifying) Next time you click a link of protocol-type foo you will be asked which application to open it with.
Quelle:http://kb.mozillazine.org/Register_protocol
#!/bin/bash ## skript zum öffnent von ssh links ... ## TERM=$(echo $1 | cut -d / -f 3) SAVE=$IFS IFS=":" set $TERM HOST=$1 PORT=$2 IFS=$SAVE echo "HOST $HOST" >> /tmp/ssh.link echo "PORT $PORT" >> /tmp/ssh.link if test -z "$PORT" then gnome-terminal -e "ssh $HOST " echo then >> /tmp/ssh.link else echo else >> /tmp/ssh.link gnome-terminal -e "ssh $HOST -p $PORT" fi
Beispieleintrag fürs wiki
ssh://gondor gondor
vpn-pppd ssh Tunnelscript
ssh nagus cat /usr/local/sbin/vpn-pppd
enable diffie-hellman-group1-sha1 key exchange
mit dem direkten befehl:
- ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 123.123.123.123
dauerhaft eintragen:
- /etc/ssh/ssh_config
Host 123.123.123.123 KexAlgorithms +diffie-hellman-group1-sha1