Automatischer SSH-Login ohne Schlüsselpaare

veröffentlicht am 07. Januar 2010

Ich bin derzeit auf Arbeit dabei, ein Backup-System für unsere Linux-Server einzurichten, für das auf jedem Server ein bestimmter Benutzer und dann eine Schlüssel-basierte Authentifizierung eingerichtet werden muss.

Problem dabei ist, dass die Einrichtung eine saumäßige Arbeit nach sich zieht, wenn man das Ganze auf vielen Rechnern einrichten möchte. Deshalb habe ich ein Script geschrieben, das die Einrichtung der „Clients“ automatisiert. Dabei stieß ich auf das Problem, dass ich beim Ausführen des Scripts viermal in Kürze dasselbe Passwort eingeben muss, da die Befehle ssh, scp und ssh-copy-id kein Passwort per Parameter annehmen.

Das macht sicherheitstechnisch zwar Sinn, mir hierbei leider unnötigen Aufwand. Besser wäre es doch, das Passwort nur einmal eingeben zu müssen, um es dann automatisch an die jeweiligen Befehle übergeben zu können.

Bei meiner Suche nach einem automatischen Login für SSH bin ich zunächst nur auf die gängige Methode gestoßen und wurde im IRC angeflamed: „Richte Schlüsselpaare ein!“ war die harsche Antwort. Große Klasse – genau das habe ich mit meinem Script ja vor. Letztendlich bin ich dann irgendwie auf das Tool expect für Linux aufmerksam geworden.

Mit dem Tool kann man Kommandozeilen-Programme unter Linux automatisiert steuern, ähnlich AutoIt unter Windows. Um sich automatisch ohne eine Schlüssel-basierte Authentifizierung auf einem anderen Linux-System per SSH einloggen zu können, habe ich folgendes expect-Script geschrieben:

#!/usr/bin/expect

# Parameter auslesen
set host [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]

# Einstellungen
set timeout 1

# Automatischer Login
spawn ssh $user@$host
expect "yes/no" {
  send "yes\r"
}
expect "password:" {
  send "$pass\r"
}

# Eingabe wieder an den Benutzer übergeben
interact

Script installieren

Zunächst musst du natürlich das Programm expect auf deinem Rechner installieren. Unter Debian-basierten Systemen geht das z.B. per

aptitude install expect

unter openSUSE hingegen über

yast2 -i expect

Danach lädst du das Script mit wget herunter:

wget http://www.patrick-gotthard.de/wp-content/uploads/autologin.zip

Dann musst du das Script entpacken

unzip autologin.zip

und ausführbar machen

chmod +x <Script>

Eventuell schiebst du das Script nach /usr/bin, damit du das Script systemweit nutzen kannst. Das Script kann dann wie folgt benutzt werden:

autologin <Hostname oder IP-Adresse> <Benutzername> <Passwort>

Achtung!

Bitte beachte: man sollte keine SSH-Passwörter in Scriptfiles ablegen, da dies ein hohes Sicherheitsrisiko darstellt. Es empfiehlt sich die Einrichtung einer Schlüssel-basierten Authentifizierung, wenn du eine SSH-Anmeldung automatisieren willst.

Kommentare

Schlüsselpaare einrichten finde ich garnicht so schlecht, da dann die PubkeyAuthentication genutzt wird und Brute-Force Angriffe zwecklos sind.

Keychain mit Schlüsselpaaren ist die Alternative.

Kommentar #1 von Bernhard am 13. März 2013


Wie ich oben im Artikel geschrieben habe, ging es darum dass ich die Einrichtung der schlüsselbasierten Authentifizierung automatisieren wollte :)

Ansonsten will man diese Methode hier nicht nutzen :D

Kommentar #2 von Patrick am 13. März 2013


Hinterlasse einen Kommentar