Wie richte ich SSH ein, damit ich mein Passwort nicht eingeben muss?

112077
Richard Hoskins

Wie richte ich SSH ein, damit ich bei der Verbindung zu einem Host kein Passwort eingeben muss?

138
Man könnte argumentieren, wenn die Verwendung solcher Schlüssel kein Passwort erfordert. Um zu vermeiden, dass jeder, der an Ihren privaten Schlüssel gelangt, diesen tatsächlich missbrauchen kann, können Sie den Schlüssel durch ein eigenes Kennwort schützen. Natürlich kann man das Passwort leer lassen, aber es gibt viele Fälle, in denen das nicht empfohlen wird. Arjan vor 15 Jahren 0
Beim neuesten Cygwin mit der neuesten SSH wurde ich erneut gefragt, da ich meine `~ / .ssh / config`-Änderung vornehmen musste, die jetzt` PubkeyAcceptedKeyTypes ssh-rsa *, ssh-dss * `erforderlich ist HDave vor 8 Jahren 0

10 Antworten auf die Frage

156
grawity

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

Wenn Sie GNOME verwenden, kann die Seepferdchen- Anwendung ("Kennwörter und Verschlüsselungsschlüssel") dies für Sie erledigen: Datei -> Neu -> Secure Shell-Schlüssel .

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

  • rsa: die Standardeinstellung
  • dsa: mehr oder weniger gleichwertig, außer auf 1024-Bit-Schlüssel beschränkt
  • ecdsa: gleiche Sicherheit mit kleineren Schlüsseln, aber relativ neu und in SSH-Software etwas selten.
  • ed25519: Hohe Sicherheit (widerstandsfähiger 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 Speicherort für den neuen Schlüssel. Es wird empfohlen, den vorgeschlagenen Standardpfad zu verwenden, da dort alle anderen Tools danach suchen.

Laden Sie den öffentlichen Schlüssel auf den Remote-Server hoch

Wieder kann Seepferdchen das oft für Sie tun. Klicken Sie in " Meine persönlichen Schlüssel" mit der rechten Maustaste auf Ihren SSH-Schlüssel und wählen Sie " Schlüssel für sichere Shell konfigurieren" .

Oder ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostim Terminal.

Oder ganz von Hand Schritt für Schritt:

  1. Erstellen Sie ein Verzeichnis (falls noch nicht vorhanden), das .sshim Heimatverzeichnis des Remote-Benutzers auf dem Remote-Host benannt ist.
  2. Erstellen Sie in diesem Verzeichnis eine Datei mit dem Namen authorized_keys(falls noch nicht vorhanden).
  3. Falls Ihre Fernbedienung umaskliberaler als üblich ist, machen sich die Datei nicht Gruppe beschreibbare: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Kopieren Sie den Inhalt Ihres lokalen öffentlichen Schlüssels ( ~/.ssh/id_rsa.pub) schließlich irgendwie in die Remote- ~/.ssh/authorized_keysDatei.

Laden Sie den Schlüssel in den SSH-Agenten

Wenn Sie Ihren privaten Schlüssel in einen SSH- Agenten laden, wird der entschlüsselte Schlüssel im Speicher gehalten. Wir möchten, dass das Kennwort nicht erneut eingegeben wird, wenn wir einen Server verwenden.

Zunächst muss der Agent gestartet oder der Pfad eines gestarteten Kommunikationssockels in eine Variable geladen werden. Wenn Sie den ssh-agent auf einem Terminal ausführen, werden Befehle zum Zuweisen und Einstellen der Agentenvariablen generiert. Diese Befehle können zur Verwendung in einem anderen Terminal in einer Datei gespeichert werden. Alternativ können Sie diese Befehle ausführen und vergessen, denselben Agenten in einem anderen Terminal erneut zu verwenden. zB: eval $(ssh-agent).

Zum Laden des Schlüssels müssen Sie ihn einfach ausführen ssh-addund ihm die Passphrase geben.

Wenn Sie GNOME verwenden, bietet gnome-keyring-daemon normalerweise die gleiche SSH-Agentenfunktionalität wie ssh-agent. Sie müssen also nichts starten. GNOME wird den Schlüssel auch beim Anmelden automatisch laden und entsperren.

Shell ohne Kennwort in den Remote-Server

Wenn alles richtig gemacht wurde, werden Sie nicht zur Eingabe eines Kennworts aufgefordert. Wenn mit dem Agenten etwas nicht stimmt und nicht mit dem Schlüssel, werden Sie aufgefordert, die Passphrase für den Schlüssel und nicht das Kennwort für das Benutzerkonto einzugeben.ssh user@server

Alles, was ssh zur Kommunikation verwendet, funktioniert ohne Eingabe des Benutzerkontokennworts, wenn der richtige Schlüssel in den Agenten geladen wird. Programme wie scp, sftp und rsync machen davon Gebrauch.


Anmerkungen:

  • Sie benötigen nur einen SSHv2-Schlüssel, da SSHv1 sehr unsicher ist und jetzt nicht verwendet wird.
  • Sie benötigen auch nur einen Schlüsseltyp - entweder RSA oder DSA reicht aus. (ed25519 und ECDSA sind beide aktuell 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_dsaanstelle von id_rsaund ECDSA muss dies tun id_ecdsa.
  • OpenSSH-Server älter als 3.0 verwendet authorized_keys2- es ist jedoch unwahrscheinlich, dass ältere als 5.0 verwendet werden.
  • Diese Anweisungen gelten nur für OpenSSH Version 3.0 und höher. lsh, ssh.comund andere (Unix- und nicht) SSH-Server sind in diesem Lernprogramm nicht enthalten.

Beispiele:

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

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this  cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorised_keys '# oder so 
  • Agentenvariablen für die Wiederverwendung speichern (ausführliches Beispiel)
    ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .ssh / Cross-Terminal-Agent 
"ssh-add -l" ausführen: Ich habe dies getan und es heißt "Der Agent hat keine Identitäten" ... jetzt was? Jason S vor 15 Jahren 0
Ah, Sie müssen "ssh-add " sagen und dann werden Sie nach Ihrer Passphrase gefragt. Bitte machen Sie dies in Ihrem Beitrag deutlicher. Sie sollten auch "Vierte, ssh ausführen" hinzufügen. Ein Teil des Problems bei der Dokumentation mit diesem Zeug ist, dass es scheinbar offensichtliche Schritte beschönigt, die NICHT für jemanden, der neu in dem Prozess ist und der keine Ahnung hat, was los ist und wie diese Programme zusammenarbeiten, nicht offensichtlich ist. Jason S vor 15 Jahren 6
Jason: ssh-add -l soll prüfen, ob ein Agent läuft. Bei ssh-add ohne Argumente wird der Schlüssel vom Standardspeicherort hinzugefügt (~ / .ssh / id_rsa). Wie auch immer, aktualisiert. grawity vor 15 Jahren 1
Es gibt einen Befehl `ssh-copy-id`, der den öffentlichen Schlüssel auf den Zielhost kopiert und Berechtigungen automatisch setzt. hasen vor 15 Jahren 4
Gute Antwort! Es fehlt etwas über die Dateiberechtigungen der Schlüsseldateien - ich hatte gerade ein Problem damit. Die private Schlüsseldatei sollte nur für mich zugänglich sein, und die öffentliche Schlüsseldatei sollte nur für mich schreibbar sein. ripper234 vor 14 Jahren 1
Erwähnenswert ist, dass Sie nach dem Einrichten von SSH-Schlüsseln die Deaktivierung der Kennwortauthentifizierung über SSH in Erwägung ziehen sollten, indem Sie in "/ etc / sshd_config" die Option "PasswordAuthentication no" festlegen. dimo414 vor 9 Jahren 0
Hinweis: GNOME `seahorse` [unterstützt noch nicht] (https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/201786) Schlüssel, die [ed25519] (https: // en.) Verwenden .wikipedia.org / wiki / EdDSA) in seinem `ssh-agent`-Socket (erlaubt auch nicht die Erstellung von ed25519-Schlüsseln) (https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/1420522) ). Dazu benötigen Sie den offiziellen OpenSSH-`ssh-agent`. [Details und Anweisungen hier] (https://unix.stackexchange.com/a/189646/87770) Adam Katz vor 8 Jahren 0
Ein Liner: `ssh-keygen -f ~ / .ssh / id_rsa -N" "; ssh-copy-id -i ~ / .ssh / id_rsa Benutzername @ server-ip-or-address` (ersetzen Sie einfach` username @ server ' -ip-or-address`). totymedli vor 6 Jahren 1
Jetzt werde ich jedoch bei jedem Login aufgefordert, das SSH-Passwort einzugeben João Pimentel Ferreira vor 6 Jahren 0
Tolles Tutorial! Funktioniert wie Charme George Chalhoub vor 6 Jahren 0
18
freiheit

Sie haben nicht angegeben, auf welchem ​​Unix Sie sich befinden, mit welchem ​​Unix Sie sich verbinden, mit welcher Shell Sie arbeiten, welche SSH-Variante Sie verwenden usw. Ein Teil davon muss möglicherweise etwas angepasst werden. Dies basiert auf relativ neuen Versionen von OpenSSH, das bei vielen Unix-Varianten verwendet wird.

Dies ist alles von Ihrem lokalen Desktop-System.

ssh-keygen 

Stellen Sie sicher, dass Sie den Standard für den Schlüsselnamen verwenden. Ich schlage vor, dass Sie tun auf diesem Schlüssel ein Passwort gesetzt, andernfalls wird es ein Sicherheitsproblem ist. "-t rsa" wäre keine schlechte Idee, wird aber wahrscheinlich nicht benötigt.

ssh-copy-id username@server 

Daraufhin werden Sie nach dem Kennwort gefragt, mit dem Sie sich anmelden möchten, und es werden die Daten für authorized_keys für Sie eingerichtet. (keine Notwendigkeit, es mit der Hand zu tun)

Dann das:

`ssh-agent` 

oder vielleicht das:

exec ssh-agent sh 

oder:

exec ssh-agent bash 

Dadurch wird ein SSH-Agent gestartet, der Ihren Schlüssel aufnehmen kann. Wenn Sie sich bei vielen modernen Unix-Varianten grafisch angemeldet haben, ist dies bereits geschehen. Die erste Variante (mit den Backticks) stellt einen ssh-agent in den Hintergrund und richtet die Umgebungsvariablen ein, um mit ihm zu sprechen. Bei den zweiten beiden muss der Agent eine Shell für Sie ausführen, sodass der Agent beim Beenden der Shell beendet wird.

Bei vielen modernen Unix-Varianten wird bereits ein Agent für Sie ausgeführt, insbesondere wenn Sie sich grafisch angemeldet haben. Sie könnten " ps aux | grep ssh-agent" oder " ps -ef | grep ssh-agent" versuchen ; Wenn bereits etwas läuft, verwenden Sie das.

Dann endlich:

ssh-add 

Es wird nach einer Passphrase gefragt. gib es den, den du ssh-keygen gegeben hast. Es gibt auch Möglichkeiten, es grafisch nachzufragen. Sie können das ssh-agent und das ssh-add-Zeug in Ihre Anmeldeskripts aufnehmen (das Setup unterscheidet sich je nach verwendeter Shell), um dies zu automatisieren, aber einige Unix-Varianten (zum Beispiel Ubuntu Linux) erledigen das automatisch Sie müssen lediglich einen Schlüssel erstellen und ssh-copy-id verwenden, um ihn auf dem Remote-Host einzurichten.

Jetzt sollte " ssh username@server" funktionieren, ohne nach Authentifizierung zu fragen. Hinter den Kulissen verwendet der ssh-agent einen Schlüssel und bittet den Agenten, die magischen Signiertricks dafür zu tun.

11
スーパーファミコン

Dies ist auch in PuTTY unter Windows möglich.

Nachdem Sie alle öffentlichen / privaten Schlüsselpaare eingerichtet haben (wie andere Antworten hier zeigen), führen Sie PuttyGen aus. Laden Sie dort den bereits eingerichteten privaten Schlüssel und speichern Sie ihn dann als privaten PuTTY-Schlüssel (ppk).

Klicken Sie dann in PuTTY einfach auf die gespeicherte Sitzung, zu der Sie sich automatisch anmelden möchten, und klicken Sie auf Laden. Gehen Sie von hier aus in Connection -> Data im linken Bereich, und geben Sie in "Benutzername für automatische Anmeldung" den Benutzernamen für diesen Remote-Server ein:

PuTTY-Benutzername

Gehen Sie anschließend in Connection -> SSH -> Auth und suchen Sie nach dem in PuttyGen erstellten PPK:

PuTTY-Eintrag für den privaten Schlüssel

Gehen Sie dann zurück zur Sitzungsseite und speichern Sie die zuvor geladene Sitzung.

Der erste Image-Link "PuTTY-Benutzername" scheint defekt zu sein. Peter Mortensen vor 15 Jahren 0
PuTTY enthält eine eigene Version von ssh-agent; Es heißt Festzug. Es läuft in der Taskleiste und hält Ihren Schlüssel für Sie. Sie müssen niemals den ssh-agent ausführen. Aktivieren Sie in den Optionen von PuTTY im Abschnitt Auth die Option "Agentweiterleitung zulassen". Pageants Verbindung wird an das Remote-Ende weitergeleitet, um Ihren Schlüsselagenten zur Verfügung zu stellen. Kevin Panko vor 15 Jahren 2
3
Chris Bunch

Aus einer sehr ähnlichen Frage zu ServerFault würde ich die Verwendung von ssh-copy-id empfehlen, die alle Schritte zur Einrichtung von Authentifizierungsschlüsseln für Sie ausführt :

ssh-copy-id ist ein Skript, das ssh verwendet, um sich an einem Remote-Computer anzumelden (vermutlich unter Verwendung eines Anmeldekennworts. Daher sollte die Kennwortauthentifizierung aktiviert sein, es sei denn, Sie haben mehrere Identitäten geschickt verwendet).

Außerdem werden die Berechtigungen des Home-Servers des Remote-Benutzers ~ / .ssh und ~ / .ssh / Authorized_keys geändert, um die Gruppenbeschreibbarkeit zu entfernen (was Sie sonst daran hindern würde, sich anzumelden, wenn der Remote-sshd in seiner Konfiguration StrictModes festgelegt hat).

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

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

ssh-copy-id user@host 

Geben Sie einmal Ihr Passwort ein und los geht's!

3
scetoaux

Abgesehen von allen, die bereits beschrieben wurden, wie man ssh-Schlüssel setzt, empfehle ich Keychain als ssh-agent Console-Frontend, das es Ihnen ermöglicht, nur einen pro Systemprozess und nicht pro Login zu behandeln.

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 verwenden, hängen Sie einfach folgendes an ~/.bashrc(ähnlich wie bei anderen Shells):

if type keychain >/dev/null 2>/dev/null; then keychain --nogui -q <all your SSH/PGP keys> [ -f ~/.keychain/$-sh ] && . ~/.keychain/$-sh [ -f ~/.keychain/$-sh-gpg ] && . ~/.keychain/$-sh-gpg fi 
2
TheTXI

http://linuxproblem.org/art_9.html

Dein Zielen

Sie möchten Linux und OpenSSH verwenden, um Ihre Aufgaben zu automatisieren. Daher benötigen Sie eine automatische Anmeldung von Host A / Benutzer a an Host B / Benutzer b. Sie möchten keine Kennwörter eingeben, weil Sie ssh von einem Shell-Skript aus aufrufen möchten.

Das Downvote gehörte nicht mir, aber es würde mir nichts ausmachen, wenn die Leute ihre Antwort löschten, wenn sie bemerkten, dass jemand anderes ein paar Sekunden zuvor eine ähnliche Antwort geschrieben hatte. Arjan vor 15 Jahren 1
Arjan: Ich stimme Ihnen größtenteils zu, aber wenn die Posten nur einige Sekunden voneinander entfernt sind, halte ich es nicht unbedingt für angemessen, die Person auf dem zweiten Platz zu bestrafen. Ich sage nicht, dass Sie sie durch Upvoting belohnen müssen, aber Downvoting vermittelt den Eindruck, dass die Antwort falsch ist und nicht rechtzeitig TheTXI vor 15 Jahren 2
2
Genc Hosting

Putty hat eine -pwOption, mit der Sie eine Verknüpfung auf dem Desktop erstellen können:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password 
2
samthebest

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

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 
1
chaos
  1. Führen Sie auf dem verbindenden Host aus ssh-keygen. (Wenn Sie dazu aufgefordert werden, müssen Sie einen Typ angeben ssh-keygen -t rsa.) Wenn Sie nach einem Dateispeicherort gefragt werden, übernehmen Sie die Standardeinstellung. Wenn Sie nach einer Passphrase gefragt werden, drücken Sie die Eingabetaste, um keine Passphrase zu erhalten.
  2. cat ~/.ssh/id_rsa.pub(oder was auch immer der Standard-Dateispeicherort ssh-keygenwar, obwohl Sie eine wirklich alte sshInstallation haben müssten, damit es anders ist); Kopieren Sie die Ausgabe in Ihre Zwischenablage.
  3. Melden Sie sich auf dem Zielhost normalerweise als das Konto an, zu dem Sie eine Verbindung herstellen möchten. Bearbeiten Sie die Datei ~/.ssh/authorized_keys(falls ~/.sshnicht vorhanden, sloginan einem anderen Ort; dies ist der einfache und einfache Weg, um sie mit den richtigen Berechtigungen zu erstellen). Fügen Sie Ihre Zwischenablage (die die id_rsa.pubvom anderen Host enthält) in diese Datei ein.
-1 für den Vorschlag, keine Passphrase hinzuzufügen. Jeder, der die Datei liest, kann sich jetzt ohne Berechtigung als legitimer Benutzer ausgeben. bortzmeyer vor 15 Jahren 3
Erstens bat er, sein Passwort nicht eingeben zu müssen. Ich habe nicht wirklich gedacht, dass es eine Verbesserung ist, eine Passphrase anstelle seines Passworts eingeben zu müssen. Zweitens, du liegst falsch. Aus diesem Grund gibt es einen öffentlichen und einen privaten Schlüssel, sodass der öffentliche Schlüssel weltweit verfügbar sein kann. chaos vor 15 Jahren 2
Das betreffende Kennwort wird bei der Schlüsselgenerierung eingegeben, nicht bei jeder Verbindung. Richtig? Richard Hoskins vor 15 Jahren 0
Nein. Mit einer Passphrase generierte Schlüssel erfordern, dass die Passphrase bei jeder Verwendung des Schlüssels eingegeben wird. chaos vor 15 Jahren 0
Falsch. Bei ssh-agent (siehe akzeptierte Antwort) geben Sie das Passwort nur einmal pro Sitzung ein. bortzmeyer vor 15 Jahren 2
0
nerdwaller

If you want to do it all in the terminal in Linux:

On the host

cd ~/.ssh/

ssh-keygen -t -b -C "some comment text if you want" -f id_ArbitraryName

The items in the {} are options, use rsa or dsa and choose the bit size (bigger is more secure)

Then you need to add the permissions to the authorized_keys and authorized_keys2 files.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Then download the id_AribtraryName file to the box you want to ssh from. If the connecting box is unix based, a config file may be necessary (in putty, someone above covered that).

On the Connecting Box

In your config file - vim ~/.ssh/config

Host example.host.com # or your computer name

User username

IdentityFile ~/.ssh/id_ArbitraryName

The config file needs permissions of 600. The SSh folder needs 700.

Hope that helps if you run into the config issue that is omitted a lot.