Frage Wie richte ich SSH so ein, dass es sich mit Hilfe von Schlüsseln anstelle eines Benutzernamens / Passworts authentifizieren kann?


Wie richte ich ssh ein, um einen Benutzer mit Schlüssel anstelle eines Benutzernamens / Passworts zu authentifizieren?


32
2018-05-01 14:14


Ursprung




Antworten:


Für jeden Benutzer: Sie sollten (auf ihrem lokalen Rechner) ihr Schlüsselpaar mit erzeugen ssh-keygen -t rsa (das rsa kann mit ersetzt werden dsa oder rsa1 auch, obwohl diese Optionen nicht empfohlen werden). Dann müssen sie den Inhalt ihres öffentlichen Schlüssels (id_rsa.pub) in ~/.ssh/authorized_keys auf dem Server wird angemeldet.


25
2018-05-01 14:16



Die einzige andere Sache, die ich hinzufügen würde, ist die Berechtigungen für die Datei und das Verzeichnis zu betrachten. - trent
Vergessen Sie nicht chmod 0700 .ssh chmod 0600 .ssh / authorized_keys - Dave Cheney
Generiere die Schlüssel auf diese Weise, aber überprüfe dann @Chris Bunchs Post bezüglich "ssh-copy-id". Das ist der Weg, um deine 'id_rsa.pub' zu übertragen. - Gareth
@gyaresu: Danke! Ich habe gerade etwas Neues gelernt! :-D - Chris Jester-Young


Ich bevorzuge das eigentlich ssh-Kopie-ID, ein Skript, das standardmäßig auf * nix gefunden wird (kann angelegt werden) Mac OS X leicht genug), dass dies automatisch für Sie erledigt. Von der man-Seite:

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.


23
2018-05-01 15:28



@Chris Bunch JEDER SCHAUEN HIER! :) ssh-copy-id ist definitiv die Möglichkeit, seine id_rsa.pub zu teilen - Gareth
Cool, ich wusste nie davon ... Ich habe mein eigenes Drehbuch geschrieben, um genau dasselbe zu tun: - / - David Z


Hum, verstehe es nicht. Einfach einen Schlüssel erstellen und loslegen. :) WIE MAN Zusätzlich können Sie die Anmeldung per Passwort verbieten. In z.B. / etc / ssh / sshd_config:

PasswordAuthentication no

6
2018-05-01 14:17



Außerdem müssen Sie UsePAM no einstellen (oder PAM entsprechend konfigurieren). Es ist erstaunlich, wie viele HOWTOs diesen Teil vermissen. Wenn Sie dies nicht tun, können Sie sich weiterhin mit einem Passwort anmelden. - Nathan


Dies ist ziemlich einfach zu tun - es gibt eine einfache Anleitung hier gefunden.

Die wichtigsten Punkte sind:

  • Lauf ssh-keygen auf deiner Maschine. Dadurch werden öffentliche und private Schlüssel für Sie generiert.
  • Kopieren Sie den Inhalt Ihres öffentlichen Schlüssels (wahrscheinlich in ~/.ssh/id_rsa.pub) in ~/.ssh/authorized_keys auf dem Remote-Computer.

Es ist wichtig daran zu denken, dass jeder, der Zugriff auf den privaten Schlüssel auf Ihrem Computer hat, denselben Zugriff auf den Remote-Computer erhält. Wenn Sie das Schlüsselpaar generieren, können Sie hier ein Passwort für zusätzliche Sicherheit eingeben.


3
2018-05-01 14:18



Ich empfehle Cut-and-Paste anstelle von Kopieren. Eine authorized_keys-Datei kann mehrere Schlüssel enthalten, und Sie möchten die anderen bereits vorhandenen Schlüssel nicht überlisten. - Chris Jester-Young
Meine Lieblingslösung wurde der Wayback Machine übergeben: web.archive.org/web/20061103161446/http://... - Philip Durbin
@Chris oops - ich wollte es lieber in die Datei kopieren als überschreiben! Antwort aktualisiert jetzt zur Klärung - ConroyP


Für Windows-Benutzer zum Einrichten von Putty 


2
2018-05-05 23:01





Um zusammenzufassen, was andere gesagt haben, ist das Einrichten von SSH-Schlüsseln einfach und von unschätzbarem Wert.

Auf der Maschine werden Sie SSHing sein von Sie müssen Ihr Schlüsselpaar generieren:

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

Drücken Sie einfach die Eingabetaste, wenn Sie dazu aufgefordert werden, und geben Sie eine Passphrase ein, wenn Sie dazu aufgefordert werden. Im Idealfall unterscheidet sich dies von Ihrem regulären Anmeldepasswort sowohl auf dem aktuellen Host als auch auf denen, an denen Sie SSHing betreiben.

Als nächstes müssen Sie den Schlüssel, den Sie gerade erstellt haben, auf den Host, den Sie SSH wollen, kopieren zu. Die meisten Linux-Distributionen haben ein Tool ssh-copy-id dafür:

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Wenn Ihre Distribution dies nicht hat, sollten Sie den Schlüssel auf den Zielhost kopieren und ihn zu dem (möglicherweise vorhandenen) hinzufügen. .ssh/authorized_keys Datei:

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

Um den maximalen Nutzen aus den SSH-Schlüsseln zu ziehen, sollten Sie einen SSH-Agenten ausführen. Wenn Sie eine Desktop-Umgebung (Gnome, KDE, etc.) verwenden, dann starten Sie einfach einen SSH-Agenten für Sie. Wenn nicht, können Sie Ihrer Shell-RC-Datei Folgendes hinzufügen (.bashrc, .profile, usw.):

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1
2018-05-09 17:42





Dies ist als Checkliste gedacht. Wenn man Punkt für Punkt folgt, sollten die häufigsten Probleme mit passwortlosen Logins behandelt werden. Die meisten dieser Punkte werden an anderer Stelle erwähnt; Dies ist eine Aggregation.

Es muss einen geben ~/.ssh Verzeichnis chmod 700 auf jeder Maschine unter dem Konto, das die Verbindungen herstellen oder empfangen wird.

Der (private) Schlüssel muss ohne Passphrase generiert werden, oder es kann ein Agent gestartet werden, der eine entschlüsselte Version eines Passphrasen-Schlüssels enthält, den Clients verwenden können. Starten Sie den Agenten mit ssh-agent $SHELL . Es ist das $SHELL Teil, der mich eine Weile brauchte, um zu finden. Sehen Sie die man-Seite, da es viele Details gibt, wenn Sie einen Agenten verwenden möchten.

Vergessen Sie nicht, dass standardmäßig schwache (<2048 Bit DSA) Schlüssel von den neuesten Versionen von sshd nicht akzeptiert werden.

Folgendes muss auf dem Client-Rechner zu tun sein entstehen eine Verbindung.

  1. Ihr privater Schlüssel muss eingefügt werden ~/.ssh/id_rsa oder ~/.ssh/id_dsa wie angemessen. Sie können einen anderen Namen verwenden, dieser muss jedoch in einer Option -i des Befehls ssh auf dem ursprünglichen Computer enthalten sein, um den privaten Schlüssel explizit anzugeben.

  2. Dein privater Schlüssel muss sein chmod 600.

  3. Überprüfen Sie, ob sich Ihr Home-Ordner befindet chmod 700.

Jetzt um einer Maschine zu erlauben erhalten eine Anfrage. Ein gängiges Modell ist, dass ein Administrator Ihnen Zugriff auf eine Maschine gewährt, die Sie nicht besitzen (wie Shared Web Hosting). Daher ist die Idee mit ssh, dass Sie Ihre anbieten Öffentlichkeit Schlüssel zu wem auch immer Ihnen das Konto gibt. Aus diesem Grund legen Sie im Allgemeinen keine privaten Schlüssel auf den Rechner, der Anfragen empfängt. Wenn Sie möchten, dass diese Maschine auch ausgehende ssh ausführt, müssen Sie die oben genannten Schritte wie eine ursprüngliche Maschine behandeln.

  1. Ihr öffentlicher Schlüssel muss in einer Datei namens " ~/.ssh/authorized_keys unter dem Konto, das wird erhalten die Verbindungen. Sie können hier auch andere Schlüssel platzieren, die sich über dieses Konto verbinden dürfen. Eine besonders knifflige Sache, wenn Sie sich in vi befinden und den Schlüssel aus dem Paste-Puffer in PuTTY in die Datei einfügen, ist dies: Der Schlüssel beginnt mit einem "ssh-". Wenn Sie sich nicht im Einfügemodus befinden, wird das erste "s" vi in ​​den Einfügemodus versetzen und der Rest der Taste wird gut aussehen. Aber Sie werden ein "s" am Anfang des Schlüssels vermissen. Es hat Tage gedauert, bis ich das gefunden habe.
  2. ich mache gerne chmod 600 ~/.ssh/authorized_keys. Es muss mindestens g-w sein.
  3. Jetzt muss der Host-Fingerabdruck dem Cache hinzugefügt werden. Gehen Sie zu Maschine A und ssh zu Maschine B manuell. Beim ersten Mal erhalten Sie eine Abfrage wie "Möchten Sie ... zum Host-Schlüssel-Cache hinzufügen?". Wenn Sie versuchen, eine Automatisierung (z. B. ein Skript) für die Verwendung dieser Anmeldung zu erhalten, müssen Sie sicherstellen, dass der ssh-Client, der von der Automatisierung verwendet wird, diese Aufforderung nicht erhält.

1
2017-10-13 15:10



@chicks: Danke, die Änderungen sind willkommen. - Vic K


Wie andere bereits gesagt haben, sollten sich Ihre Benutzer auf ihren Client-Rechnern mit ssh-keygen Key-Pairs machen und ihren öffentlichen Schlüssel zu ~ / .ssh / authorized_keys auf dem Rechner hinzufügen, an dem sie sich anmelden wollen.

Für detailliertere Informationen empfehle ich jedoch SSH, die sichere Schale.


0
2018-05-01 15:30





Es gibt gute Ratschläge hier, also werde ich es nicht wiederholen. Sobald Sie einen Server eingerichtet haben, mit dem Sie sich mit Schlüsseln anmelden können, können Sie andere mit demselben Liner einrichten, um das Gleiche zu tun:

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

Wechseln Sie einfach in Ihr Home-Verzeichnis, definieren Sie die Variable remote als einen oder mehrere Servernamen und machen Sie einen Haufen auf einmal. Das Passwort, nach dem es fragt, ist Ihr ssh-Passwort für den Remote-Server. Sie können natürlich eine vereinfachte Version ohne die for-Schleife verwenden:

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

ERINNERUNG: Kopieren Sie nur Ihre öffentlichen Schlüssel. Sie möchten nicht, dass Ihre privaten Schlüssel auf einem Server liegen, auf dem jemand mit sudo diese kopieren und Ihre Passphrase brutal erzwingen kann.


0
2018-06-10 21:05