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?
Wie kann ich SSH so einrichten, dass ich mein Passwort nicht eingeben muss, wenn ich mich mit einem Host verbinde?
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:
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.
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:
.ssh
im Home-Verzeichnis des entfernten Benutzers auf dem entfernten Host. authorized_keys
(wenn sie nicht bereits vorhanden ist). umask
liberaler als üblich ist, machen Sie die Datei nicht gruppenschreibbar: chmod go-w ~/.ssh ~/.ssh/authorized_keys
. ~/.ssh/id_rsa.pub
) in die entfernte ~/.ssh/authorized_keys
-Datei (anhängen). 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.
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.
id_dsa
anstelle von id_rsa
, bei ECDSA sind es id_ecdsa
.authorized_keys2
- aber es ist wirklich unwahrscheinlich, dass Sie etwas Älteres als 5.0 in Gebrauch finden werden. lsh
, ssh.com
und andere (Unix und nicht) SSH-Server werden in dieser Anleitung nicht berücksichtigt. 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
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.
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.
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!
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
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
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.
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
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. 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. ~/.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.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.