Wie richtet man ssh ein, um sich mit Schlüsseln anstelle eines Benutzernamens / Passworts zu authentifizieren?

34

Wie richtet man ssh ein, um einen Benutzer mit Schlüsseln anstelle eines Benutzernamens / Passworts zu authentifizieren?

ScArcher2
quelle

Antworten:

27

Für jeden Benutzer: Sie sollten (auf ihrem lokalen Computer) ihr Schlüsselpaar mithilfe von generieren ssh-keygen -t rsa(das rsakann durch dsaoder rsa1auch ersetzt werden, obwohl diese Optionen nicht empfohlen werden). Dann müssen sie den Inhalt ihres öffentlichen Schlüssels ( id_rsa.pub) ~/.ssh/authorized_keysauf dem Server ablegen, bei dem sie angemeldet sind.

Chris Jester-Young
quelle
Das Einzige, was ich noch hinzufügen möchte, ist die Überprüfung der Berechtigungen für die Datei und das Verzeichnis.
Mitte
2
Vergessen Sie nicht chmod 0700 .ssh chmod 0600 .ssh / authorized_keys
Dave Cheney
3
Generiere die Schlüssel definitiv auf diese Weise, aber überprüfe dann den Beitrag von @Chris Bunch bezüglich "ssh-copy-id". So übertragen Sie Ihre 'id_rsa.pub'.
Gareth
@gyaresu: Danke! Ich habe gerade etwas Neues gelernt! :-D
Chris Jester-Young
23

Eigentlich bevorzuge ich ssh-copy-id , ein Skript, das standardmäßig auf * nix zu finden ist (auch unter Mac OS X problemlos möglich) und das dies automatisch für Sie erledigt. Von der Manpage:

ssh-copy-id ist ein Skript, das ssh verwendet, um sich bei einem Remote-Computer anzumelden (vermutlich mit einem Anmeldekennwort, daher sollte die Kennwortauthentifizierung aktiviert sein, es sei denn, Sie haben mehrere Identitäten geschickt verwendet).

Es ändert auch die Berechtigungen für das Home des Remote-Benutzers, ~ / .ssh und ~ / .ssh / authorized_keys, um die Gruppenbeschreibbarkeit zu entfernen (was Sie andernfalls daran hindern würde, sich anzumelden, wenn auf dem Remote-SSHD StrictModes in seiner Konfiguration festgelegt ist).

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

Chris Bunch
quelle
2
@ Chris Bunch JEDER BLICK HIER! :) ssh-copy-id ist definitiv der Weg, um seine id_rsa.pub zu teilen
Gareth
1
Cool, ich wusste nie darüber ... Ich schrieb mein eigenes Skript, um genau das gleiche zu tun: - /
David Z
6

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

PasswordAuthentication no
Knoten
quelle
2
Außerdem müssen Sie UsePAM no einstellen (oder PAM entsprechend konfigurieren). Es ist erstaunlich, wie viele HOWTOs diesen Teil verpassen. Andernfalls können Sie sich weiterhin mit einem Passwort anmelden.
Nathan
3

Das ist ziemlich geradlinig zu tun - es eine einfache Komplettlösung ist zu hier .

Die wichtigsten Punkte sind:

  • Laufen Sie ssh-keygenauf Ihrem Computer. 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) und fügen Sie ihn ~/.ssh/authorized_keysauf dem Remote-Computer ein.

Beachten Sie, dass dies allen Benutzern, die Zugriff auf den privaten Schlüssel auf Ihrem Computer haben, den gleichen Zugriff auf den Remote-Computer ermöglicht. Wenn Sie das Schlüsselpaar generieren, können Sie hier aus Sicherheitsgründen ein Kennwort eingeben.

ConroyP
quelle
Ich empfehle das Ausschneiden und Einfügen anstelle des Kopierens. Eine authorized_keys-Datei kann mehrere Schlüssel enthalten, und Sie möchten die anderen Schlüssel, die sich bereits in der Datei befinden, nicht blockieren.
Chris Jester-Young
Mein bevorzugtes Exemplar wurde der Wayback-Maschine übergeben: web.archive.org/web/20061103161446/http://…
Philip Durbin
@ Chris oops - Ich wollte es in die Datei kopieren, anstatt es zu überschreiben! Antwort zur Klärung jetzt aktualisiert
ConroyP
1

Zusammenfassend lässt sich sagen, dass das Einrichten von SSH-Schlüsseln einfach und von unschätzbarem Wert ist.

Auf der Maschine , dass Sie SSHing sein von Ihnen Ihr Schlüsselpaar benötigen zu 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. Dies unterscheidet sich idealerweise von Ihrem regulären Anmeldekennwort auf dem aktuellen Host und denjenigen, zu denen Sie SSHing ausführen.

Als nächstes müssen Sie an den Host - Schlüssel Sie gerade erzeugt kopieren , die Sie SSH wollen zu . Die meisten Linux-Distributionen haben dazu ein Tool ssh-copy-id:

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 das nicht hat, sollten Sie den Schlüssel auf den Zielhost kopieren und zur (möglicherweise vorhandenen) .ssh/authorized_keysDatei hinzufügen :

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 größtmöglichen Nutzen aus SSH-Schlüsseln zu ziehen, müssen Sie einen SSH-Agenten ausführen. Wenn Sie eine Desktop-Umgebung (Gnome, KDE usw.) verwenden, wird durch einfaches Abmelden und erneutes Anmelden ein SSH-Agent für Sie gestartet. Wenn nicht, können Sie die folgenden Funktionen der Shell RC - Datei (hinzufügen .bashrc, .profileusw.):

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
Drew Stephens
quelle
1

Dies ist als Checkliste gedacht. Wenn man es Punkt für Punkt verfolgt, sollten die häufigsten Fallstricke für passwortlose Anmeldungen behandelt werden. Die meisten dieser Punkte werden an anderer Stelle erwähnt. Dies ist eine Aggregation.

Auf jedem Computer muss sich unter dem Konto ein ~/.sshVerzeichnis befinden chmod 700, aus dem die Verbindungen stammen oder empfangen werden.

Der (private) Schlüssel muss ohne eine Passphrase generiert werden, oder es kann ein Agent gestartet werden, der eine entschlüsselte Version eines Schlüssels mit einer Passphrase enthält, die von den Clients verwendet werden kann. Starten Sie den Agenten mit ssh-agent $SHELL. Es $SHELLhat eine Weile gedauert, bis ich den Teil gefunden habe. In der Manpage finden Sie zahlreiche Details, wenn Sie einen Agenten verwenden möchten.

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

Folgendes muss auf der Client-Seite Maschine getan werden , um ihren Ursprung eine Verbindung her.

  1. Ihr privater Schlüssel muss in ~/.ssh/id_rsaoder ~/.ssh/id_dsaentsprechend platziert werden. Sie können einen anderen Namen verwenden, der jedoch in der Option -i des Befehls ssh auf dem Ursprungscomputer enthalten sein muss, um den privaten Schlüssel explizit anzugeben.

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

  3. Stellen Sie sicher, dass Ihr privater Ordner ist chmod 700.

Nun, damit eine Maschine eine Anfrage erhalten kann. Ein gängiges Modell ist, dass ein Administrator Ihnen Zugriff auf einen Computer gewährt, den Sie nicht besitzen (z. B. Shared Web Hosting). Daher besteht die Idee bei ssh darin, dass Sie Ihren öffentlichen Schlüssel jedem anbieten , der Ihnen das Konto gibt. Aus diesem Grund legen Sie in der Regel keine privaten Schlüssel auf dem Computer ab, auf dem Anforderungen eingehen. Wenn Sie jedoch möchten, dass dieser Computer auch ausgehendes ssh ausführt, müssen Sie es wie einen Ursprungscomputer mit den obigen Schritten behandeln.

  1. Ihr öffentlicher Schlüssel muss in einer Datei abgelegt sein, die ~/.ssh/authorized_keysunter dem Konto aufgerufen wird, das die Verbindungen erhalten soll. Sie können auch andere Schlüssel eingeben, die über dieses Konto eine Verbindung herstellen dürfen. Eine besonders schwierige Sache, wenn Sie sich in vi befinden und den Schlüssel aus dem Einfügepuffer in PuTTY in die Datei einfügen, ist folgende: Der Schlüssel beginnt mit einem "ssh-". Wenn Sie sich nicht im Einfügemodus befinden, wird vi mit dem ersten "s" in den Einfügemodus versetzt, und der Rest der Taste sieht gut aus. Am Anfang der Taste fehlt jedoch ein "s". Es hat Tage gedauert, bis ich das gefunden habe.
  2. Ich mag es chmod 600 ~/.ssh/authorized_keys. Es muss mindestens gw sein.
  3. Jetzt muss der Host-Fingerabdruck zum Cache hinzugefügt werden. Gehen Sie zu Maschine A und ssh manuell zu Maschine B. Beim ersten Mal erhalten Sie eine Abfrage wie "Möchten Sie ... zum Hostschlüssel-Cache hinzufügen?". Wenn Sie versuchen, die Automatisierung (z. B. ein Skript) zur Verwendung dieser Anmeldung zu veranlassen, müssen Sie sicherstellen, dass der von der Automatisierung verwendete ssh-Client diese Eingabeaufforderung nicht erhält.
Vic K
quelle
0

Wie bereits erwähnt, sollten Ihre Benutzer mit ssh-keygen auf ihren Client-Computern Schlüsselpaare für sich selbst erstellen und ihren öffentlichen Schlüssel zu ~ / .ssh / authorized_keys auf dem Computer hinzufügen, auf dem sie sich anmelden möchten.

Für detailliertere Informationen empfehle ich jedoch SSH, The Secure Shell .

Neall
quelle
0

Hier gibt es gute Ratschläge, deshalb werde ich es nicht wiederholen. Sobald Sie einen Server eingerichtet haben, auf dem Sie sich mit Schlüsseln anmelden können, können Sie andere Server so einrichten, dass sie dasselbe mit diesem einen Liner 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 führen Sie eine Reihe von Schritten aus. Das Passwort, nach dem gefragt wird, 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"

HINWEIS: Kopieren Sie nur über Ihre öffentlichen Schlüssel. Sie möchten nicht, dass Ihre privaten Schlüssel auf einem Server liegen, auf dem jeder mit sudo sie kopieren und Ihre Passphrase erzwingen kann.

Bruno Bronosky
quelle