SSH
Konfiguration
Der SSH Server wird konfiguriert in /etc/ssh/sshd_config
- Authentifizierung über Passwort erlauben
# To disable tunneled clear text passwords, change to no here! PasswordAuthentication yes # PermitEmptyPasswords no
- Neustart des Servers mit Runlevel Editor oder:
/etc/init.d/sshd restart # oder rcsshd restart
- Putty konfigurieren, wegen yast und midnight commander
Connection: Terminal-type String = linux Auto-login username = root Translation: UTF-8
Troubleshooting
Server reagiert mit langer Antwortzeit
Eventuell die Schnittstelle fix definieren, auf der der Server lauscht.
# /etc/ssh/sshd_conf ListenAddress 10.0.0.82
... oder
# /etc/ssh/sshd_conf UseDNS no
Authentifikation über Schlüsselpaare
- Am SSH Client Schlüsselpaar generieren
ssh-keygen -t rsa ssh-keygen -t rsa -C "root@clientHostname"
- Alle Eingaben mit <Enter> bestätigen. Es wird in diesem Fall ein Key ohne Sicherung durch eine Passphrase erzeugt.
- Der öffentliche und der private Schlüssel befinden sich nun in ~/.ssh
-rw------- 1 root root 887 2007-11-22 17:56 id_rsa -rw-r--r-- 1 root root 221 2007-11-22 17:56 id_rsa.pub
- Den öffentlichen Schlüssel zum SSH Server kopieren
scp -p id_rsa.pub 10.80.12.2:.ssh/authorized_keys
Wenn mehrere öffentliche Schlüssel in .ssh/authorized_keys
gespeichert werden sollen, dann ...
scp -p id_rsa.pub remoteHost:~/new_key
... und anschließend am Server
cat ~/new_key >> ~/.ssh/authorized_keys rm ~/new_key
Das Kopieren geht auch mit dem Befehl
ssh-copy-id username@remoteHost
- Den öffentlichen Schlüssel auf dem Client-System löschen
Unter Debian ist es anscheinend nötig, dass man auf dem Client den öffentlichen Schlüssel löscht
rm /root/.ssh/id_rsa.pub
- Zugriffsrechte ändern:
chmod 600 ./ssh/authorized_keys
- Weitere Infos
http://www.hjp.at/doc/ssh-client-mini-howto.html http://www.hjp.at/doc/ssh-client-mini-howto.html
https://www.howtoforge.com/set-up-ssh-with-public-key-authentication-debian-etch/#comments
SSH Login als root von einem Ubuntu Client
Da man sich unter Ubuntu nicht als root einloggen kann, werden immer die Schlüsselpaare des angemeldeten Benutzers verwendet.
- Mit folgendem Workaround ist es mir gelungen, eine Verbindung ohne Passwortabfrage als root am entfernten System herzustellen.
- Schlüsselpaare für root erzeugen
sudo ssh-keygen -t rsa
- Die SSH-Schlüssel in das Benutzerverzeichnis kopieren
#Beispiel username=myName sudo cp /root/.ssh /home/$username/
- Schlüssel zum entfernten Host kopieren
remoteHost=10.0.0.111 sudo ssh-copy-id root@remoteHost
Putty konfigurieren
- Putty.exe ist ein SSH Client für Windows
Downwload und Installation der Putty Suite von
http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.60-installer.exe
- Mit PuttyGen.exe ein Schlüsselpaar erzeugen. Key speichern, z.B.:
H:\Putty-private-key.ppk H:\Putty-puplic-key - muss nicht gespeichert werden, wenn untenstehende Vorgangsweise gewählt wird.
Key ohne Passphrase erzeugen, wenn die Sicherheit 100 prozentig ist ;-)
- Über clipboard den Public Key in folgende Datei eintragen (am Server):
~/.ssh/authorized_keys
- Wenn eine Passphrase für den Private Key verwendet wurde, dann sollte "Pageant.exe" aus der Putty Suite gestartet werden. Aufruf in Autostart. Damit ist es nicht notwendig, bei jedem Verbindungsaufbau über Schlüsselpaare die Passprase einzugeben.
SSH auf ein bestimmtes Kommando beschränken
Auf dem Server in die Datei ~/.ssh/authorized_keys vor dem eigentlichen Schlüssel folgendes einfügen:
# command="das Kommando eingeben" Hier steht der Schlüssel ... # Beispiel: command="rsync --server --sender -vlogDtprz --delete-excluded --numeric-ids . /"
Um den Wortlaut des Befehls zu erhalten, auf dem Client folgendes eingeben:
ps axw | grep rsync
Kommando als Eingabeparameter
Folgender Befehl erstellt eine neue Datei auf dem Zielrechner
ssh user@Zielrechner touch "newfile.txt"
Wechseln in ein bestimmtes Verzeichnis nach dem Login
Das funktioniert nicht über einen Eingabeparameter, da nach Ausführung des Befehls die Sitzung gleich wieder geschlossen wird.
- Konfiguration am Zielrechner:
# ~/.profile cd /mein/ziel/verzeichnis
Kommando nach Beendigung der Sitzung weiter ausführen
Vor ein Kommando den Befehl nohup stellen.
# Beispiel nohup bak_sh auto shutdown
Mehrere Kommandos hintereinander ausführen:
nohup bash -c "for nr in 1 2 3 4 ; do rm backup.$nr -R ; done"