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


Wie richte ich SSH ein, damit ich bei der Verbindung mit einem Host nicht mein Passwort eingeben muss?


136
2017-07-18 16:51


Ursprung


Man könnte argumentieren, wenn die Verwendung solcher Schlüssel kein Passwort erfordert. Um zu vermeiden, dass jemand, der Ihren privaten Schlüssel in die Hand bekommt, ihn tatsächlich missbrauchen kann, kann er den Schlüssel durch ein eigenes Passwort schützen. Natürlich kann man dieses Passwort leer lassen, aber es gibt viele Fälle, in denen das nicht empfehlenswert wäre. - Arjan
Auf der neuesten Cygwin mit der neuesten SSH, wurde ich erneut aufgefordert, weil ich eine Änderung an meinem vornehmen musste ~/.ssh/config das ist jetzt erforderlich PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss* - HDave


Antworten:


Generiere einen SSH-Schlüssel (falls du noch keinen hast)

Wenn Sie GNOME verwenden, Seepferdchen Anwendung ("Passwörter und Verschlüsselungsschlüssel") kann es für Sie tun: Datei -> Neu -> Sicherer Shell-Schlüssel.

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

  • RSA: der Standard
  • dsa: mehr oder weniger äquivalent, außer 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 Seitenkanalattacken und schwache Zufallszahlengeneratoren). Sehr schnelle Signaturgenerierung. Sehr neu. Nur verfügbar in OpenSSH> = 6.5.

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

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

Nochmal, Seepferdchen kann das oft für dich tun - in Meine persönlichen SchlüsselKlicken Sie mit der rechten Maustaste auf Ihren SSH-Schlüssel und wählen Sie Konfigurieren Sie den Schlüssel für die sichere Shell.

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

Oder ganz manuell Schritt für Schritt:

  1. Erstellen Sie ein Verzeichnis (falls es nicht bereits existiert) namens .ssh im Home-Verzeichnis des Remote-Benutzers auf dem Remote-Host.
  2. Erstellen Sie in diesem Verzeichnis eine Datei namens authorized_keys (wenn es nicht schon existiert).
  3. Falls Ihre Fernbedienung umask ist liberaler als üblich, machen Sie die Datei nicht gruppenbeschreibbar: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Schließlich, irgendwie kopieren (anhängen) den Inhalt Ihres lokalen Öffentlicher Schlüssel (~/.ssh/id_rsa.pub) in die Fernbedienung ~/.ssh/authorized_keys Datei.

Laden Sie den Schlüssel in den SSH-Agenten

Wenn Sie Ihren privaten Schlüssel in ein SSH laden Agent, wird es den entschlüsselten Schlüssel im Speicher halten. Wir möchten, dass das Passwort nicht jedes Mal neu eingegeben wird, wenn wir einen Server einrichten.

Zuerst muss der Agent gestartet werden oder der Pfad eines gestarteten Kommunikations-Sockets in eine Variable geladen werden. Laufen SSH-Agent Auf einem Terminal werden Befehle zum Zuweisen und Einstellen der Agentenvariablen generiert. Diese Befehle können in einer Datei für die Verwendung in einem anderen Terminal gespeichert werden. Alternativ könnte man diese Befehle ausführen und vergessen, denselben Agenten in einem anderen Terminal wiederzuverwenden. z.B: eval $(ssh-agent).

Das Laden des Schlüssels ist eine einfache Frage der Ausführung ssh-add und geben Sie die Passphrase.

Wenn Sie GNOME verwenden, Gnome-Schlüssel-Daemon bietet normalerweise die gleichen SSH-Agentenfunktionen wie ssh-agent. Sie sollten daher nichts starten müssen. GNOME lädt und entschlüsselt den Schlüssel automatisch auch bei der Anmeldung.

Shell in den Remote-Server ohne ein Passwort

Wenn alles richtig gemacht wurde, benutze ssh Benutzer @ ServerSie werden 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 und nicht das Kennwort für das Benutzerkonto einzugeben.

Alles, was ssh für die Kommunikation verwendet, funktioniert ohne Eingabe des Benutzerkontokennworts, wenn der richtige Schlüssel im Agenten geladen ist. Programme wie scp, sftp und rsync nützen Sie das aus.


Anmerkungen:

  • Sie benötigen nur einen SSHv2-Schlüssel, da SSHv1 sehr unsicher ist und jetzt nicht mehr verwendet wird.
  • Sie brauchen auch nur eine Art von Schlüssel - entweder RSA oder DSA ist genug. (ed25519 und ECDSA sind beide neu und werden daher nicht überall unterstützt).
  • Alle diese Schritte sind für RSA- und DSA-Schlüssel identisch. Wenn Sie DSA verwenden, verwenden Sie id_dsa Anstatt von id_rsaund ECDSA wird haben id_ecdsa.
  • OpenSSH-Server älter als 3.0 verwendet authorized_keys2 - Aber es ist wirklich unwahrscheinlich, dass Sie etwas älter als 5.0 in Gebrauch finden.
  • Diese Anweisungen gelten nur für OpenSSH Version 3.0 und neuer. lsh, ssh.comund andere SSH-Server (Unix und nicht) 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 # dies
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; Katze >> ~ / .ssh / authorized_keys '# oder das
    
  • Agentenvariablen für die Wiederverwendung speichern (ausführliches Beispiel)
    ssh-agent> ~ / .ssh / cross-terminal-agent
    . ~ / .ssh / Cross-Terminal-Agent
    

152



ah, du musst sagen "ssh-add {pfad-zu-privat-schlüssel-datei}" und dann wirst du nach deinem passwort fragen. Bitte machen Sie dies in Ihrem Beitrag deutlicher. Sie sollten auch "Fourth, run ssh" hinzufügen. Teil des Problems mit der Dokumentation mit diesem Zeug ist, dass es über scheinbar offensichtliche Schritte glänzt, die NICHT für jemanden offensichtlich sind, der neu im Prozess ist, der keine Ahnung hat, was vor sich geht und wie diese Programme zusammenarbeiten. - Jason S
Jason: ssh-add -l soll prüfen, ob ein Agent läuft. ssh-add ohne Argumente fügt den Schlüssel vom Standardspeicherort (also ~ / .ssh / id_rsa) hinzu. Wie auch immer, aktualisiert. - grawity
Es gibt einen Befehl ssh-copy-id Dieser kopiert den öffentlichen Schlüssel auf den Zielhost und legt die Berechtigungen automatisch fest. - hasen
Gute Antwort! Es fehlt etwas an den Dateiberechtigungen der Schlüsseldateien - ich hatte gerade ein Problem damit. Die Datei mit dem privaten Schlüssel sollte nur für mich zugänglich sein, und die Datei mit dem öffentlichen Schlüssel sollte nur von mir beschreibbar sein. - ripper234
Einzeiler: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address (nur ersetzen username@server-ip-or-address). - totymedli


Sie haben nicht angegeben, auf welchem ​​Unix Sie sich befinden, mit welchem ​​Unix Sie verbunden sind, welche Shell Sie verwenden, welche SSH-Variante Sie verwenden, usw. Daher müssen einige davon möglicherweise etwas angepasst werden; Dies basiert auf einigermaßen aktuellen Versionen von OpenSSH, die für viele Unix-Varianten verwendet werden.

Dies ist alles von Ihrem lokalen Desktop-System.

ssh-keygen

Stellen Sie sicher, dass Sie den Standardwert für den Schlüsselnamen verwenden. Ich schlage vor, dass Sie machen Legen Sie eine Passphrase für diesen Schlüssel fest, andernfalls handelt es sich um ein Sicherheitsproblem. "-t rsa" wäre keine schlechte Idee, wird aber wahrscheinlich nicht benötigt.

ssh-copy-id username@server

Dann werden Sie nach dem Passwort gefragt, mit dem Sie sich anmelden möchten, und Sie richten die authorized_keys-Dateien für Sie ein. (keine Notwendigkeit, es von 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 den Schlüssel halten kann. Bei vielen modernen Unix-Varianten ist dies, sofern Sie grafisch angemeldet sind, bereits erfolgt. Die erste Variante (mit den Backticks) setzt einen ssh-agent in den Hintergrund und richtet die Umgebungsvariablen ein, um damit zu sprechen. In den zweiten beiden Fällen führt der Agent eine Shell für Sie aus, sodass der Agent beendet wird, wenn Sie die Shell verlassen.

Bei vielen modernen Unix-Varianten wird bereits ein Agent für Sie laufen, besonders wenn Sie sich grafisch angemeldet haben. Du könntest versuchen "ps aux | grep ssh-agent" oder "ps -ef | grep ssh-agent"Wenn etwas bereits läuft, benutze das."

Dann endlich:

ssh-add

Es wird nach einer Passphrase gefragt; Gib ihm den, den du ssh-keygen gegeben hast. Es gibt auch Möglichkeiten, grafisch nachzufragen. Und Sie können den ssh-agent und ssh-add stuff in Ihre Login-Skripte legen (Setup ist abhängig von der verwendeten Shell unterschiedlich), um dies zu automatisieren, aber einige Unix-Varianten (z. B. das aktuelle Ubuntu Linux) tun das meiste automatisch Alles, was Sie wirklich tun müssen, ist einen Schlüssel zu erstellen und ssh-copy-id zu verwenden, um ihn auf dem Remote-Host einzurichten.

Jetzt, "ssh username@server"sollte funktionieren, ohne nach einer Authentifizierung zu fragen. Hinter den Kulissen benutzt es einen Schlüssel, den der ssh-Agent hält, und bittet den Agenten, die magischen Signiertricks dafür zu machen.


18





Es ist möglich, dies zu tun Kitt auch unter Windows.

Sobald Sie das öffentlich / private Schlüsselpaar alle eingerichtet haben (wie andere Antworten hier zeigen), führen Sie PuttyGen. Laden Sie dort den vorhandenen privaten Schlüssel, den Sie bereits eingerichtet haben, und speichern Sie ihn als privaten PuTTY-Schlüssel (ppk).

Klicken Sie dann in PuTTY auf die gespeicherte Sitzung, für die Sie sich automatisch anmelden möchten, und klicken Sie auf Laden. Von hier gehen Sie in Verbindung -> Daten in den linken Bereich, und in "Auto-Login-Benutzername" geben Sie den Benutzernamen für diesen Remote-Server ein:

PuTTY username entry

Danach gehen Sie in Verbindung -> SSH -> Auth, und suchen Sie nach der PPK, die Sie in PuttyGen gemacht haben:

PuTTY private key entry

Gehen Sie dann zurück zur Session-Seite und speichern Sie die Session, die Sie zuvor geladen haben.


11



Der erste Bildlink, "PuTTY Benutzername", scheint gebrochen zu sein. - Peter Mortensen
PuTTY enthält eine eigene Version von ssh-agent; es heißt Pageant. Es läuft in der Taskleiste und hält Ihren Schlüssel für Sie. Sie müssen ssh-agent niemals ausführen. Aktivieren Sie dazu in den PuTTY-Optionen im Bereich Auth die Option "Agentenweiterleitung zulassen", und die Pageant-Verbindung wird an das Remote-Ende weitergeleitet, um Ihren Schlüsselagenten für sie verfügbar zu machen. - Kevin Panko


Von einer sehr ähnlichen Frage an ServerfehlerIch würde es empfehlen ssh-Kopie-ID, die alle Schritte zum Einrichten von Authentifizierungsschlüsseln für Sie ausführt:

ssh-copy-id ist ein Skript, das ssh verwendet   sich an einem Remote-Computer anzumelden   (vermutlich mit einem Login-Passwort, also   Passwort-Authentifizierung sollte sein   aktiviert, es sei denn, Sie haben etwas getan   clevere Verwendung mehrerer Identitäten)

Es ändert auch die Berechtigungen der   Heim des entfernten Benutzers, ~ / .ssh, und   ~ / .ssh / authorized_keys um die Gruppe zu entfernen   Beschreibbarkeit (was sonst   verhindern, dass Sie sich anmelden, wenn die   remote sshd hat StrictModes in seiner   Aufbau).

Wenn die Option -i gegeben ist, dann die   Identitätsdatei (standardmäßig auf   ~ / .ssh / identity.pub) wird verwendet,   unabhängig davon, ob es welche gibt   Schlüssel in Ihrem ssh-Agenten.

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

ssh-copy-id user@host

Geben Sie Ihr Passwort einmal ein und Sie können loslegen!


3





Abgesehen von allen bereits gesagt, wie man SSH-Schlüssel einstellen, empfehle ich Schlüsselbund Als ein SSH-Agent Konsolen-Frontend, mit dem Sie nur einen pro Systemprozess anstatt pro Login verwalten können.

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

Um es zu verwenden, fügen Sie einfach folgendes an Ihren an ~/.bashrc (ähnlich für andere Schalen):

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

3





http://linuxproblem.org/art_9.html

Dein Zielen

Sie möchten Linux und OpenSSH verwenden, um Ihre Aufgaben zu automatisieren. Dazu benötigen Sie eine automatische Anmeldung von Host A / Benutzer a zu Host B / Benutzer b. Sie möchten keine Passwörter eingeben, weil Sie ssh von einem innerhalb eines Shell-Skripts aufrufen möchten.


2



Der Downvote gehörte mir nicht, aber ich hätte nichts dagegen, wenn Leute ihre Antwort löschten, wenn sie bemerkten, dass jemand anders eine ähnliche Antwort vor ein paar Minuten gepostet hatte. - Arjan
Arjan: Zum größten Teil stimme ich dir zu, aber wenn die Beiträge nur um einige Sekunden getrennt sind, denke ich nicht unbedingt, dass es fair ist, die Person auf dem zweiten Platz zu bestrafen. Ich sage nicht, dass Sie sie belohnen müssen, indem Sie aufheben, aber durch das Abstimmen entsteht der Eindruck, dass die Antwort falsch ist und nicht rechtzeitig - TheTXI


Ich habe dieses sehr, sehr kurze Tutorial geschrieben nachdem ich WIRKLICH WIRKLICH mit wirklich WIRKLICH langen Tutorien frustriert wurde, 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





Kitt hat ein -pw Option, 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





  1. Führen Sie auf dem verbindenden Host aus ssh-keygen. (Wenn Sie angeben, dass Sie einen Typ angeben müssen, tun Sie ssh-keygen -t rsa.) Wenn Sie nach einem Dateispeicherort gefragt werden, übernehmen Sie den Standard. Wenn Sie nach einer Passphrase gefragt werden, drücken Sie die Eingabetaste für keine Passphrase.
  2. cat ~/.ssh/id_rsa.pub (oder wie auch immer der Standardspeicherort in ssh-keygen war, obwohl du eine haben musst Ja wirklich alt ssh installieren, damit es anders ist); Kopiere die Ausgabe in deine Zwischenablage.
  3. Melden Sie sich normalerweise als der Account, mit dem Sie sich verbinden möchten, beim Zielhost an. Bearbeiten Sie die Datei ~/.ssh/authorized_keys (ob ~/.ssh existiert nicht, slogin irgendwohin; Dies ist der einfache und einfache Weg, um es mit den richtigen Berechtigungen zu erstellen. Fügen Sie Ihre Zwischenablage ein (enthält die id_rsa.pub von dem anderen Host) in diese Datei.

1



-1 für den Vorschlag, keine Passphrase hinzuzufügen. Ohne eine Passphrase kann jeder, der die Datei liest, nun als legitimer Benutzer auftreten. - bortzmeyer
Zuerst bat er, sein Passwort nicht eingeben zu müssen. Ich dachte nicht wirklich, dass das Eingeben einer Passphrase anstelle seines Passworts eine Verbesserung wäre. Zweitens, du liegst falsch; deshalb gibt es einen öffentlichen Schlüssel und einen privaten Schlüssel, also kann der öffentliche Schlüssel in der Welt sein. - chaos
Das entsprechende Kennwort wird während der Schlüsselgenerierung eingegeben, nicht jedes Mal, wenn Sie eine Verbindung herstellen. Richtig? - Richard Hoskins
Nein. Bei Schlüsseln, die mit einer Passphrase generiert wurden, muss die Passphrase jedes Mal eingegeben werden, wenn der Schlüssel verwendet wird. - chaos
Falsch. Mit ssh-agent (siehe die angenommene Antwort) geben Sie das Passwort nur einmal pro Sitzung ein. - bortzmeyer


Wenn Sie alles im Terminal unter Linux machen wollen:

Auf dem Host

CD ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "Kommentartext, wenn Sie möchten" -f ID_ArbitraryName

Die Elemente in der {} 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.

Katze id_ArbitraryName.pub >> authorized_keys

Katze id_AribtraryName.pub >> authorized_keys2

Laden Sie dann die Datei id_AribtraryName in das Feld herunter, von dem Sie ssh möchten. Wenn die Verbindungsbox unixbasiert ist, kann eine Konfigurationsdatei notwendig sein (im Fall von Kitteln bedeckt jemand darüber).

Auf der Verbindungsbox

In Ihrer Konfigurationsdatei - vim ~ / .ssh / config

Host example.host.com # oder Ihr Computername

Nutzername

Identitätsdatei ~ / .ssh / id_ArbitraryName

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

Hoffe, dass das hilft, wenn Sie auf das config Problem stoßen, das viel weggelassen wird.


0