2009-07-18 16:51:50 +0000 2009-07-18 16:51:50 +0000
155
155

Wie kann ich SSH so einrichten, dass ich mein Passwort nicht eingeben muss?

Wie kann ich SSH so einrichten, dass ich mein Passwort nicht eingeben muss, wenn ich mich mit einem Host verbinde?

Antworten (10)

167
167
167
2009-07-18 17:36:45 +0000

Erzeugen Sie einen SSH-Schlüssel (wenn Sie keinen haben)

Wenn Sie GNOME verwenden, kann die Anwendung seahorse (“Passwörter und Verschlüsselungsschlüssel”) dies für Sie erledigen: Datei -> Neu -> Secure Shell Key.

Wenn Sie das Terminal bevorzugen, führen Sie ssh-keygen -t <type> aus, um ein Schlüsselpaar zu erzeugen. Gültige Schlüsselpaartypen sind:

  • rsa: die Vorgabe
  • dsa: mehr oder weniger gleichwertig, aber auf 1024-Bit-Schlüssel beschränkt
  • ecdsa: gleiche Sicherheit mit kleineren Schlüsseln, aber relativ neu und etwas selten in SSH-Software.
  • ed25519: Hohe Sicherheit (resistenter gegen Seitenkanalangriffe und schwache Zufallszahlengeneratoren). Sehr schnelle Signaturerstellung. Sehr neu. Nur verfügbar in OpenSSH >= 6.5 .

Das Programm fragt Sie nach einer Passphrase und einem Ort, an dem der neue Schlüssel gespeichert werden soll. Es wird empfohlen, den vorgeschlagenen Standardpfad zu verwenden, da alle anderen Tools dort nach dem Schlüssel suchen werden.

Hochladen des öffentlichen Schlüssels auf den entfernten Server

Auch das kann seahorse oft für Sie erledigen - klicken Sie in My Personal Keys mit der rechten Maustaste auf Ihren SSH-Schlüssel und wählen Sie Configure key for secure shell.

Oder, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host im Terminal.

Oder, komplett manuell Schritt für Schritt:

  1. Erstellen Sie ein Verzeichnis (falls es noch nicht existiert) namens .ssh im Home-Verzeichnis des entfernten Benutzers auf dem entfernten Host.
  2. Erstellen Sie in diesem Verzeichnis eine Datei mit dem Namen authorized_keys (wenn sie nicht bereits vorhanden ist).
  3. Für den Fall, dass Ihr entfernter umask liberaler als üblich ist, machen Sie die Datei nicht gruppenschreibbar: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Schließlich kopieren Sie irgendwie den Inhalt Ihres lokalen öffentlichen Schlüssels (~/.ssh/id_rsa.pub) in die entfernte ~/.ssh/authorized_keys-Datei (anhängen).

Laden Sie den Schlüssel in den ssh-Agenten

Wenn Sie Ihren privaten Schlüssel in einen ssh agent laden, wird dieser den entschlüsselten Schlüssel im Speicher halten. Wir wollen dies, um zu vermeiden, dass wir das Passwort jedes Mal neu eingeben müssen, wenn wir uns in einen Server einklinken.

Zuerst muss der Agent gestartet werden oder der Pfad eines gestarteten Kommunikationssockets in eine Variable geladen werden. Wenn Sie ssh-agent auf einem Terminal ausführen, werden Befehle zum Zuweisen und Setzen der Agentenvariablen generiert. Diese Befehle können in einer Datei gespeichert werden, um sie in einem anderen Terminal zu verwenden. Alternativ könnte man diese Befehle ausführen und denselben Agenten in einem anderen Terminal wiederverwenden. z. B.: eval $(ssh-agent).

Das Laden des Schlüssels ist eine einfache Sache, indem man ssh-add ausführt und ihm die Passphrase gibt.

Wenn Sie GNOME verwenden, bietet gnome-keyring-daemon normalerweise die gleiche SSH-Agent-Funktionalität wie ssh-agent, so dass Sie nichts starten müssen. GNOME wird den Schlüssel bei der Anmeldung auch automatisch laden und entsperren.

Shell in den entfernten Server ohne Passwort

Wenn alles richtig gemacht wurde, werden Sie mit ssh user@server nicht nach einem Passwort gefragt. Wenn etwas mit dem Agenten und nicht mit dem Schlüssel nicht stimmt, werden Sie aufgefordert, die Passphrase für den Schlüssel einzugeben und nicht das Passwort für das Benutzerkonto.

Alles, was ssh zur Kommunikation verwendet, funktioniert ohne Eingabe des Benutzerkontopassworts, wenn der richtige Schlüssel in den Agenten geladen ist. Programme wie scp , sftp und rsync machen sich dies zunutze.


Hinweise:

  • Sie benötigen nur einen SSHv2-Schlüssel, da SSHv1 sehr unsicher ist und nicht mehr verwendet wird.
  • Sie brauchen auch nur einen Schlüsseltyp - entweder RSA oder DSA ist ausreichend. (ed25519 und ECDSA sind beide neu und werden daher nicht überall unterstützt).
  • Alle diese Schritte sind für RSA- und DSA-Schlüssel gleich. Wenn Sie DSA verwenden, verwenden Sie id_dsa anstelle von id_rsa, bei ECDSA sind es id_ecdsa.
  • OpenSSH-Server, die älter als 3.0 sind, verwenden authorized_keys2 - aber es ist wirklich unwahrscheinlich, dass Sie etwas Älteres als 5.0 in Gebrauch finden werden.
  • Diese Anweisungen gelten nur für OpenSSH-Version 3.0 und neuer. lsh, ssh.com und andere (Unix und nicht) SSH-Server werden in dieser Anleitung nicht berücksichtigt.

Beispiele:

  • Kopieren des öffentlichen Schlüssels auf einen entfernten Host:

  • Speichern von Agentenvariablen zur Wiederverwendung (ausführliches Beispiel) ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent

22
22
22
2009-07-18 17:28:34 +0000

Sie haben nicht angegeben, unter welchem Unix Sie arbeiten, mit welchem Unix Sie sich verbinden, welche Shell Sie verwenden, welche SSH-Variante Sie verwenden usw. Daher muss einiges davon möglicherweise leicht angepasst werden; dies basiert auf einigermaßen aktuellen Versionen von OpenSSH, das auf vielen Unix-Varianten verwendet wird.

Dies ist alles von Ihrem lokalen Desktop-System.

ssh-keygen

Stellen Sie sicher, dass Sie die Vorgabe für den Schlüsselnamen verwenden. Ich schlage vor, dass Sie eine Passphrase für diesen Schlüssel setzen, sonst ist es ein Sicherheitsproblem. “-t rsa” wäre keine schlechte Idee, wird aber wahrscheinlich nicht benötigt.

ssh-copy-id username@server

Das wird Sie nach dem Passwort fragen, das Sie zum Einloggen verwenden würden, und richtet die autorisierten Schlüssel für Sie ein. (Sie müssen das nicht von Hand machen)

Dann dies:

`ssh-agent`

oder vielleicht so:

exec ssh-agent sh

oder:

exec ssh-agent bash

Das wird einen SSH-Agenten starten, der Ihren Schlüssel halten kann. Auf vielen modernen Unix-Varianten, wenn Sie grafisch angemeldet sind, hat dies bereits stattgefunden. Die erste Variante (mit den Backticks) setzt einen ssh-Agenten in den Hintergrund und richtet die Umgebungsvariablen ein, um mit ihm zu sprechen. Die zweiten beiden lassen den Agenten eine Shell für Sie laufen, so dass beim Verlassen der Shell der Agent beendet wird.

Viele moderne Unix-Varianten haben bereits einen Agenten für Sie laufen, insbesondere wenn Sie sich grafisch angemeldet haben. Sie könnten es mit “ps aux | grep ssh-agent” oder “ps -ef | grep ssh-agent” versuchen; wenn bereits etwas läuft, verwenden Sie das.

Dann schließlich:

ssh-add

Es wird nach einer Passphrase fragen; geben Sie diejenige an, die Sie ssh-keygen gegeben haben. Es gibt auch Möglichkeiten, die Abfrage grafisch zu gestalten. Und Sie können die ssh-agent- und ssh-add-Sachen in Ihre Anmeldeskripte einbauen (die Einrichtung ist je nach verwendeter Shell unterschiedlich), um dies zu automatisieren, aber einige Unix-Varianten (z.B. das aktuelle Ubuntu-Linux) machen das meiste davon automatisch, so dass Sie wirklich nur einen Schlüssel erstellen und ssh-copy-id verwenden müssen, um ihn auf dem entfernten Rechner einzurichten.

Nun sollte “ssh username@server” funktionieren, ohne nach einer Authentifizierung zu fragen. Hinter den Kulissen verwendet es einen Schlüssel, den der ssh-Agent hält, und bittet den Agenten, die magischen Signiertricks für ihn zu erledigen.

11
11
11
2009-07-25 03:42:47 +0000

Sie können dies auch in PuTTY unter Windows tun.

Sobald Sie das Paar aus öffentlichem und privatem Schlüssel eingerichtet haben (wie andere Antworten hier zeigen), führen Sie PuttyGen aus. Laden Sie dort den vorhandenen privaten Schlüssel, den Sie bereits eingerichtet haben, und speichern Sie ihn dann als privaten Schlüssel (ppk) für PuTTY.

Klicken Sie dann in PuTTY einfach auf die gespeicherte Sitzung, in die Sie sich automatisch einloggen wollen, und klicken Sie auf Load. Von hier aus gehen Sie in Connection -> Data im linken Fensterbereich und geben in “Auto-login username” den Benutzernamen für diesen Remote-Server ein:

Danach gehen Sie zu Verbindung -> SSH -> Auth, und suchen Sie nach dem ppk, das Sie in PuttyGen erstellt haben:

Gehen Sie dann zurück zur Sitzungsseite und speichern Sie die Sitzung, die Sie zuvor geladen haben.

3
3
3
2009-07-18 17:39:21 +0000

Aufgrund einer sehr ähnlichen Frage auf ServerFault würde ich empfehlen, ssh-copy-id zu verwenden, das alle Schritte zum Einrichten von Authentifizierungsschlüsseln für Sie erledigt:

ssh-copy-id ist ein Skript, das ssh verwendet, um sich an einem entfernten Rechner anzumelden (vermutlich mit einem Anmeldekennwort, also sollte die Kennwortauthentifizierung aktiviert sein, es sei denn, Sie haben mehrere Identitäten geschickt eingesetzt)

Es ändert auch die Berechtigungen der Home-Datei des entfernten Benutzers, ~/. ssh und ~/.ssh/authorized_keys, um die Beschreibbarkeit von Gruppen zu entfernen (was Sie sonst daran hindern würde, sich anzumelden, wenn der entfernte sshd StrictModes in seiner Konfiguration eingestellt hat).

Wenn die Option -i angegeben wird, wird die Identitätsdatei (standardmäßig ~/.ssh/identity.pub) verwendet, unabhängig davon, ob in Ihrem ssh-Agenten irgendwelche Schlüssel vorhanden sind.

Alles, was Sie tun müssen, ist einfach dies:

ssh-copy-id user@host

Geben Sie einmal Ihr Passwort ein, und schon kann es losgehen!

3
3
3
2009-07-18 17:57:35 +0000

Abgesehen von allem, was bereits über das Setzen von ssh-Schlüsseln gesagt wurde, empfehle ich Schlüsselbund als ssh-agent Konsolen-Frontend, das es Ihnen erlaubt, nur einen pro Systemprozess statt pro Anmeldung zu verwalten.

Ich weiß, dass es bereits GNOME- und KDE-Tools gibt, die dasselbe tun, aber wenn Sie der Konsolen-Junkie-Typ sind, ist dies großartig (und kann auf den meisten Unix-Systemen verwendet werden).

Um es zu benutzen, hängen Sie einfach das Folgende an Ihr ~/.bashrc an (ähnlich für andere Shells):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [-f ~/.keychain/${HOSTNAME}-sh] && . ~/.keychain/${HOSTNAME}-sh
  [-f ~/.keychain/${HOSTNAME}-sh-gpg] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
2
2
2
2013-02-01 16:58:45 +0000

Ich habe dieses sehr, sehr kurze Tutorial geschrieben, nachdem ich WIRKLICH WIRKLICH frustriert von WIRKLICH WIRKLICH langen Tutorials war, weil es wirklich so einfach ist :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub
2
2
2
2009-07-18 16:55:59 +0000

http://linuxproblem.org/art_9.html

Ihr Ziel

Sie wollen Linux und OpenSSH verwenden, um Ihre Aufgaben zu automatisieren. Dazu benötigen Sie eine automatische Anmeldung von Host A / Benutzer a an Host B / Benutzer b. Sie wollen keine Passwörter eingeben, da Sie ssh aus einem Shell-Skript heraus aufrufen wollen.

2
2
2
2012-12-02 23:11:47 +0000

Putty hat eine Option -pw , mit der Sie eine Verknüpfung auf dem Desktop wie folgt erstellen können:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
1
1
1
2009-07-18 17:06:33 +0000
  1. Führen Sie auf dem verbindenden Host ssh-keygen aus. (Wenn Sie aufgefordert werden, einen Typ anzugeben, führen Sie ssh-keygen -t rsa aus.) Wenn Sie nach einem Dateispeicherort gefragt werden, nehmen Sie die Standardeinstellung. Wenn Sie nach einer Passphrase gefragt werden, drücken Sie die Eingabetaste für keine Passphrase.
  2. cat ~/.ssh/id_rsa.pub (oder was auch immer der Standard-Dateispeicherort in ssh-keygen war, obwohl Sie eine wirklich alte ssh-Installation haben müssten, damit es anders wäre); kopieren Sie die Ausgabe in Ihre Zwischenablage.
  3. Melden Sie sich normal auf dem Zielhost als das Konto an, mit dem Sie sich verbinden wollen. Bearbeiten Sie die Datei ~/.ssh/authorized_keys (wenn ~/.ssh nicht existiert, slogin irgendwo; das ist der einfache Weg, um sie mit den richtigen Berechtigungen zu erstellen). Fügen Sie Ihre Zwischenablage (die die id_rsa.pub vom anderen Host enthält) in diese Datei ein.
0
0
0
2012-10-25 12:27:48 +0000

Wenn Sie das alles im Terminal unter Linux machen wollen:

Auf dem Host

cd ~/.ssh/

ssh-keygen -t {rsa|dsa} -b {1024|2048|4096} -C “some comment text if you want” -f id_ArbitraryName

Die Elemente in {} sind Optionen, verwenden Sie rsa oder dsa und wählen Sie die Bitgröße (größer ist sicherer)

Dann müssen Sie die Berechtigungen zu den Dateien authorized_keys und authorized_keys2 hinzufügen.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Laden Sie dann die Datei id_AribtraryName auf die Box herunter, von der Sie ssh verwenden möchten. Wenn die verbindende Box unixbasiert ist, kann eine Konfigurationsdatei erforderlich sein (in putty, jemand weiter oben hat das behandelt).

Auf der verbindenden Box

In Ihrer Konfigurationsdatei - vim ~/.ssh/config

Host example.host.com # oder Ihr Computername

User username

IdentityFile ~/.ssh/id_ArbitraryName

Die Konfigurationsdatei benötigt Berechtigungen von 600. Der SSh-Ordner benötigt 700.

Ich hoffe, das hilft, wenn Sie auf das Problem mit der Konfiguration stoßen, die oft ausgelassen wird.