Hinzufügen eines Passworts zu .ssh / config

24

Ich benutze Ubuntu 12.04. Ich verwende ssh, um täglich eine Verbindung zu vielen Servern herzustellen, und füge ihre Parameter in die Datei .ssh / config ein . so was :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Gibt es eine Möglichkeit, Passwörter für jede Verbindung in diese Datei einzutragen? Wenn der Server nach einem Passwort fragt, gibt das Terminal seinen Pass ein und sendet ihn an den Server. Daher muss ich das Passwort nicht jedes Mal eingeben. Außerdem möchte ich kein öffentliches / privates Schlüsselpaar verwenden.

Ajo Augustine
quelle
10
Dafür sind Schlüsselpaare da.
Michael Hampton

Antworten:

31

Nein, es gibt keine Methode, um das Kennwort in nicht interaktiver Weise für die SSH-Authentifizierung mithilfe eines in openssh integrierten Mechanismus in der Befehlszeile anzugeben oder bereitzustellen. Zumindest nicht eines, von dem ich weiß. Sie könnten Ihr Passwort in das Expect-Skript einprogrammieren, aber es ist auch keine gute Lösung.

Sie möchten definitiv Schlüsselpaare für die kennwortlose Authentifizierung verwenden, wie Michael feststellte. Der private Schlüssel ist so ziemlich ein großes Kennwort in der Datei.

Danila Ladner
quelle
Die Sache ist, seine meine Klientenbediener und sie erlauben nicht LOGON mit Schlüsseln. Ich schreibe ein Bash-Skript unter Verwendung von expect für die Anmeldung auf allen Servern, auf denen die Anmeldeinformationen gespeichert werden, und entnehme sie einem USB-Speichergerät. Vielen Dank
Ajo Augustine
1
Ganz unsicher. Das einzige, was in diesem Skript vorgeschlagen werden kann, um diese Datei mit strengen Dateiberechtigungen zu sperren.
Danila Ladner
1
Wenn sie keine Schlüssel zulassen, missverstehen sie die Funktionsweise von ssh. Wenn Sie die Kennwortanmeldung zulassen, sind Sie für Wörterbuchangriffe usw. (wenn auch sehr, sehr langsame) offen. Es ist nahezu unmöglich, dasselbe mit einem privaten Schlüsselpaar zu erreichen Sorgen Sie sich, dass die Schlüssel in die falschen Hände gelangen. Sie können den privaten Teil des Schlüssels mit einem Passwort verschlüsseln, sodass Sie zwei Faktoren benötigen, um ihn verwenden zu können (das Passwort kann auch in Ihrem Schlüsselbund / von Ihrem ssh-Agenten gespeichert werden) )
Alex Berry
Informieren Sie Ihre Kunden. Erklären Sie ihnen, dass es besser ist, die Kennwortauthentifizierung zu deaktivieren und nur umgekehrte Schlüssel zuzulassen.
Nikita Kipriyanov
20

So vermeiden Sie die Folge von Kommentaren: Ja, dies ist unsicher (nicht einmal wahrscheinlich unsicher). Ich würde Ihnen dringend empfehlen, dies nur in einer Laborsituation in einem isolierten Netzwerk oder in einer ähnlichen Situation zu tun, in der keine Produktionsserver oder potenziell Produktionsserver ohne einen vollständigen Reset / ein vollständiges Format involviert sind.

Ich wollte dies einrichten, da ich nicht glaube, dass mein 2950-Switch private / öffentliche Schlüssel unterstützt, und ich hoffe, dass ich dieses Wissen irgendwann erlangen kann, aber ich bin noch nicht da.

Mit einem Alias ​​und sshpass kann dies erreicht werden.

  1. Installieren Sie sshpass
  2. Ändern Sie Ihre .ssh / config- Datei so, dass sie den in der Frage aufgeführten Benutzernamen enthält
  3. Fügen Sie Ihrem Terminal einen Alias ​​hinzu (ich habe .bashrc verwendet und würde von gloabl-Einstellungen abraten)
  4. Verwenden Sie einen Alias, um sich beim Ziel anzumelden

Mein Beispielalias lautet:

alias ssc='sshpass -pcisco ssh'

Wobei "cisco" das Passwort ist. Beachten Sie, dass zwischen -p und Passwort kein Leerzeichen steht.

Verwendung ist (unter Bezugnahme auf die Frage):

ssc server1

Hinweis: Dies beantwortet die Frage im Titel nur für diejenigen, die Suchmaschinen verwenden. Wenn Sie Server wie im Beispiel mit Fragen verwenden, sollten private / öffentliche Schlüsselpaare und nicht diese Antwort verwendet werden

DarkSheep
quelle
Die einzig mögliche Umgehung, wenn Sie aus irgendeinem Grund wirklich nicht mit Schlüsseln arbeiten können.
Sjas
Funktioniert! Genial.
Rahul
Ich würde vorschlagen, den Alias ​​durch ein vollständiges Shell-Skript zu ersetzen. Dies würde die Möglichkeit geben, dynamisch auszuwählen, welche Kennwortdatei abhängig vom Hostparameter verwendet werden soll.
7heo.tk
Man kann sehr gut ein Leerzeichen zwischen -p und dem Passwort setzen, wie es oft bei cli-Programmen der Fall ist ...
masterxilo
10

Ja, wie oben erwähnt gibt es keine Möglichkeit, das Passwort einfach zu speichern. Ich würde empfehlen, den SSH-Schlüssel für die Autorisierung zu verwenden.

Generieren Sie zunächst Ihren Schlüssel:

ssh-keygen

Kopieren Sie dann den Schlüssel auf Ihre Server / Desktops:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Das ist alles. Sie werden nie wieder nach dem Passwort gefragt.

Ich empfehle auch, die Kennwortberechtigung im Allgemeinen zu entfernen, aber das liegt bei Ihnen.

Str82DHeaD
quelle
1
Danke für den Hinweis auf ssh-copy-id! Früher habe ich so etwas benutzt, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"aber dieses Programm ist sauberer und macht die Absicht klar.
Masterxilo
3

Mit ssh geht das nicht, es ist so unsicher wie es nur geht.

Wie Danila erwähnt hat, kann man Skripte erwarten, aber ich würde mich nicht darum kümmern.

Ich frage mich, was versuchst du zu erreichen? Möchten Sie von einem Server zum anderen springen? In diesem Fall möchten Sie ssh-agent auf Ihrer Workstation einrichten und verwenden und die Agentenweiterleitung auf den Zielhosts aktivieren. Auf diese Weise kann der Austausch von Anmeldeinformationen an Ihren lokalen Agenten weitergeleitet werden, ohne dass Sie Ihren privaten Schlüssel kopieren müssen.

Eddy
quelle
VisualStudio hat das Konzept persönlicher Zugriffstoken, die app-spezifischen Kennwörtern ähneln, bei denen diese Funktion hilfreich wäre.
Spuder
1

Ich benutze dieses Skript aus dem ~/.local/binVerzeichnis

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Damit kann ich die Passphrase wie #PS <password>in der .ssh/configDatei angeben .

Aber, wie jeder sagt, es ist besser zu Einsatz ssh-keysmit , ssh-agentwenn es möglich ist

mnach
quelle
0

Der richtige Weg, um mit dieser Situation umzugehen, ist die Verwendung eines sitzungsbasierten ssh-Agenten. Hier ist, wie:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

Das Passwort bleibt dann für den Rest der Sitzung gültig. Sie müssen den ersten Befehl nur einmal ausführen und können anschließend beliebig viele Schlüssel hinzufügen. Wenn die Sitzung beendet wird, wird auch der Agent beendet, sodass kein Kennwort fest codiert gespeichert wird.

Schockiert, dass diese Antwort nach so langer Zeit nicht hier war!

pranalli
quelle
Der Grund, warum es nicht da war, ist wahrscheinlich, dass das Poster ausdrücklich sagte, dass er kein öffentlich / privates Schlüsselpaar verwenden möchte.
Jenny D sagt Reinstate Monica
1
Das habe ich verpasst, danke. Dann füge ich hinzu, dass es eine sehr, sehr schlechte Idee ist, kein Schlüsselpaar für SSH zu verwenden. Es ist sicherer UND bequemer ... Ich möchte das OP dringend bitten, es noch einmal zu überdenken. Die Verwendung eines Schlüsselpaars ohne Passphrase ist weitaus sicherer als die Verwendung eines Schlüsselpaars ohne Passwort. Im Idealfall würde man jedoch ein Schlüsselpaar mit einer Passphrase verwenden und die von mir angegebenen Schritte ausführen, wenn / wenn sie sich in einer Sitzung befinden, in der die Passphrase gespeichert werden muss.
Pranalli
-1

Sie können dies auf sicherere Weise mit sshpass tun

  1. Legen Sie Ihr Passwort ohne Verlauf fest

    exportiere PS = dein_Kennwort ; history -d $ (history 1)

  2. Legen Sie den Host-Alias ​​wie oben in ~ / .ssh / config fest

  3. Verwenden Sie ssh pass, um die Umgebungsvariable zu verwenden, und melden Sie sich mit einem einzigen Befehl auf dem gewünschten Computer an

sshpass -p $ PS ssh host_alias

In Ihrer Umgebung ist Ihr Kennwort gespeichert, und es besteht das Risiko, dass bei der Ausführung von Skripts dieses Kennwort verloren geht, wenn Sie nicht wissen, was Sie ausführen

ashishWaghmare
quelle
Nein, das ist nicht sicher. Und es ist ziemlich hässlich.
7heo.tk
Ist diese "Lösung" nicht länger als das Problem? All diese zusätzlichen Schritte, und Sie müssen noch eingebensshpass -p $PS ...
Dan H